New config API

This PR updates the config API, but does not change the way global properties are stored. They still aren't stored in the scoped property store.

Refs #4567.

### Steps

* [x] Make `Config::get` and `::set` take trailing options hashes
* [x] Add a `source` option to `Config::set`
* [x] Use the user's settings file path as the default source in `::set`
* [x] Add `sources` and `excludeSources` options to `Config::get`
* [x] Fix remaining failing specs related to the user config using new source information
* [x] Add `Config::unset`
* [x] Make `Config::observe` and `::onDidChange` consistent with `::get` by taking a scope as an option instead of the first argument.
* [x] Throw exception when trying to specify a `source` without a scope selector (To be fixed by #4567).
* [x] Bugfix: only use special priority for settings w/ user's config file as source
* [x] Update docs
* [x]  Deprecate `::isDefault` and `::getDefault` in favor of using the `source` option to `::get`
Yeah, I totally agree it is inconsistent overall, but this added line is inconsistent with the previous 2 which is why I brought it up.