Currently, when a user calls `makeSingleInstance` they need to handle the second instance in a callback.

A better pattern for both users and third-party modules who want to use this information would be to emit an event on the `app` module when the second instance starts.

A pattern like:

```js
app.makeSingleInstance();

app.on('second-instance', (e, argv) => {
  // do-stuff
});
```

As step 1 I'll introduce support for the event and deprecate the callback.  Then in a major version, we can remove the callback.
atom/browser/api/atom_api_app.cc
const App::FileIconCallback& callback,
                         gfx::Image* icon) {
  v8::Locker locker(isolate);
  v8::HandleScope handle_scope(isolate);
  if (icon && !icon->IsEmpty()) {
    callback.Run(v8::Null(isolate), *icon);
  } else {
    v8::Local<v8::String> error_message =
        v8::String::NewFromUtf8(isolate, "Failed to get file icon.");
    callback.Run(v8::Exception::Error(error_message), gfx::Image());
  }
}
}  
App::App(v8::Isolate* isolate) {
  static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this);
  Browser::Get()->AddObserver(this);
  content::GpuDataManager::GetInstance()->AddObserver(this);
  base::ProcessId pid = base::GetCurrentProcId();
  std::unique_ptr<atom::ProcessMetric> process_metric(new atom::ProcessMetric(
      content::PROCESS_TYPE_BROWSER, pid,
      base::ProcessMetrics::CreateCurrentProcessMetrics()));
  app_metrics_[pid] = std::move(process_metric);
  Init(isolate);
}
App::~App() {