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
CComPtr<ICustomDestinationList> destinations;
  if (FAILED(destinations.CoCreateInstance(CLSID_DestinationList)))
    return;
  if (FAILED(destinations->SetAppID(GetAppUserModelID())))
    return;
  
  UINT max_slots;
  CComPtr<IObjectArray> removed;
  if (FAILED(destinations->BeginList(&max_slots, IID_PPV_ARGS(&removed))))
    return;
  CComPtr<IObjectCollection> collection;
  if (FAILED(collection.CoCreateInstance(CLSID_EnumerableObjectCollection)))
    return;
  for (auto& task : tasks) {
    CComPtr<IShellLink> link;
    if (FAILED(link.CoCreateInstance(CLSID_ShellLink)) ||
        FAILED(link->SetPath(task.program.value().c_str())) ||
        FAILED(link->SetArguments(task.arguments.c_str())) ||
        FAILED(link->SetDescription(task.description.c_str())))
      return;
    if (!task.icon_path.empty() &&
        FAILED(link->SetIconLocation(task.icon_path.value().c_str(),
                                     task.icon_index)))
      return;
    CComQIPtr<IPropertyStore> property_store = link;
    if (!base::win::SetStringValueForPropertyStore(property_store, PKEY_Title,
                                                   task.title.c_str()))
      return;
    if (FAILED(collection->AddObject(link)))