The new `setAsDefaultProtocolClient`  and `removeAsDefaultProtocolClient` APIs are great, but without a way to query the current state, it's not possible to implement a UI element like this one. I think it'd be great to add `isDefaultProtocolClient`!

![image](https://cloud.githubusercontent.com/assets/1037212/14545184/fc1a6fac-026a-11e6-98d5-8bf6b2f9678e.png)

Also, I find the naming of these APIs pretty confusing. On Mac OS X and iOS `mailto` is referred to as a "URL Scheme", not a protocol (https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference), and it seems like that might be the case on Windows too. (https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx)

It'd be nice to clarify that this is registering the app system-wide, while the other `protocol` module is only for handling requests initiated from within the app. 

Maybe we could change these to `registerForURLScheme`, `isRegisteredForURLScheme`?

atom/browser/browser_win.cc
if (base::win::GetVersion() < base::win::VERSION_WIN7)
    return;
  CComPtr<IShellItem> item;
  HRESULT hr = SHCreateItemFromParsingName(
      path.value().c_str(), NULL, IID_PPV_ARGS(&item));
  if (SUCCEEDED(hr)) {
    SHARDAPPIDINFO info;
    info.psi = item;
    info.pszAppID = GetAppUserModelID();
    SHAddToRecentDocs(SHARD_APPIDINFO, &info);
  }
}
void Browser::ClearRecentDocuments() {
  CComPtr<IApplicationDestinations> destinations;
  if (FAILED(destinations.CoCreateInstance(CLSID_ApplicationDestinations,
                                           NULL, CLSCTX_INPROC_SERVER)))
    return;
  if (FAILED(destinations->SetAppID(GetAppUserModelID())))
    return;
  destinations->RemoveAllDestinations();
}
void Browser::SetAppUserModelID(const base::string16& name) {
  app_user_model_id_ = name;
  SetCurrentProcessExplicitAppUserModelID(app_user_model_id_.c_str());
}
void Browser::SetUserTasks(const std::vector<UserTask>& tasks) {