macOS Mojave adds a whole bunch of API's and utilities around a OS level concept of "dark mode", we should add API's to Electron that allow users to determine the current OS level "dark mode" setting and to configure the dark mode setting for the individual application.

#### Proposed APIs

```js
// Main Process

/**
 * This API already exists but it should continue operating as it currently does
 * on macOS < mojave and on >= mojave it should hit the the "effective appearance"
 * API linked below and respond correctly.
 **/
systemPreferences.isDarkMode()

/**
 * This API should return the current appearance setting being applied to this app as a string enum.
 * There are actually multiple different appearances that can be considered "dark mode"
 * so users can use this method to figure out EXACTLY which appearance the system is
 * using.
 *
 * By default this will return the OS level appearance settings, if users call `setAppLevelAppearance`
 * it will start returning the appearance setting that was chosen.  This behavior is controlled by macOS
 **/
systemPreferences.getEffectiveAppearance()

/**
 * Exactly the same as `getSystemAppearance()` but at the app level, each app on mojave
 * can set it's "appearance" setting independently of the system, this allows individual apps
 * to turn dark mode on / off for their app alone.
 **/
systemPreferences.getAppLevelAppearance()

/**
 * Setting but for app level appearance, this will set the `appearance` value so that mojave
 * updates its rendering and will give dark mode / light mode to the app.
 **/
systemPreferences.setAppLevelAppearance()

/**
 * Self explanatory event, should be fired when the effective appearance changes
 */
systemPreferences.on('change-effective-appearance', (newAppearance) => {})
```

API Docs:

* [Effective Appearance](https://developer.apple.com/documentation/appkit/nsapplication/2967171-effectiveappearance?language=objc) - The current appearance being applied to this application.
* App Level [Appearance](https://developer.apple.com/documentation/appkit/nsapplication/2967170-appearance?language=objc) - The current app level setting for "dark mode"
* [Possible values for `NSAppearance`](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) - These are the enum values we will have to use for the `get` and `set` APIs
* [KVO](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOBasics.html) - The reccomended strategy for monitoring changes on `effectiveAppearance`
* [Guidelines and reccomendations for supporting dark mode](https://developer.apple.com/documentation/appkit/supporting_dark_mode_in_your_interface?language=objc)

Notes:

* We will need to forward declare these API's, they are only in the `10.14` SDK
* Will need a Mojave machine to test these actually work 😆 

#### Additional context

People like dark mode... 😄 
atom/browser/mac/atom_application.h
#include "base/callback.h"
#include "base/mac/scoped_nsobject.h"
#include "base/mac/scoped_sending_event.h"
@interface AtomApplication : NSApplication <CrAppProtocol,
                                            CrAppControlProtocol,
                                            NSUserActivityDelegate> {
 @private
  BOOL handlingSendEvent_;
  base::scoped_nsobject<NSUserActivity> currentActivity_
      API_AVAILABLE(macosx(10.10));
  NSCondition* handoffLock_;
  BOOL updateReceived_;
  base::Callback<bool()> shouldShutdown_;
}
+ (AtomApplication*)sharedApplication;
- (void)setShutdownHandler:(base::Callback<bool()>)handler;
- (BOOL)isHandlingSendEvent;
- (void)setHandlingSendEvent:(BOOL)handlingSendEvent;
- (NSUserActivity*)getCurrentActivity API_AVAILABLE(macosx(10.10));
- (void)setCurrentActivity:(NSString*)type
              withUserInfo:(NSDictionary*)userInfo
            withWebpageURL:(NSURL*)webpageURL;
- (void)invalidateCurrentActivity;
- (void)updateCurrentActivity:(NSString*)type
                 withUserInfo:(NSDictionary*)userInfo;
@end