Start on StyleManager

This will take over raw stylesheet management from the theme manager
now that it’s becoming more complex with the need to target specific
host elements. Instead of actually adding nodes to the head of the
document, it will instead simply manage a set of stylesheets we want to
apply and leave actual DOM manipulation to <atom-styles> custom elements
that can render the set of active stylesheets in the appropriate
locations.
Add sourcePath parameter to StyleManager::addStyleSheet
Add group parameter to StyleManager::addStyleSheet

This can be used to sequence style elements at the correct location in
the cascade even if they are loaded later than elements in a subsequent
group.
Revise StyleManager API
Add StyleElement

This will be used to handle stylesheet rendering when we move management
of loading stylesheets to the StyleManager instead of the theme manager.
This sets us up for being able to render specific stylesheets in shadow
roots in addition to just having global stylesheets.
Use StyleManager and StylesElement to manage all stylesheet elements

For now, loading remains in the theme manager, but all application of
stylesheets is routed through atom.styles.
Add StylesElement::onDidAdd/RemoveStyleElement
Handle style element updates in StylesElement
Subscribe to <atom-styles> element to shim events in ThemeManager

This is better than subscribing to atom.styles because the events it
emits contain the *actual* style elements we insert into the DOM.
Fix theme-manager-specs
Assign properties in addition to attributes for convenience
Merge pull request #3830 from atom/ns-extract-style-manager

Extract style manager from theme manager