Add scoped settings to config

WIP: Starting this super early if folks want to give feedback.

This moves the scoped properties from syntax into config and merges them with the 'global' config. 

### TODO

* [x] Add optional selectors to `Config::get/set`
* [x] Forward deprecated writes to `atom.syntax` to `atom.config`
* [x] Forward deprecated reads on `atom.syntax` to `atom.config`
* [x] Read from `atom.config` instead of `atom.syntax`
* [x] Register scoped properties with `atom.config` instead of `atom.syntax` when loading packages.
* [x] Allow scoped settings to be observed

Refs https://github.com/atom/atom/issues/3674
I hate this method. I want to come up with something better. As the comment says, it's being used in different ways. It seems like useful data, but I dunno what the return value should be.