Add a ScopeDescriptor object

Adding this as a future-proof. At some point we would like to be able to scope settings to a particular file path (or something else? See https://github.com/atom/atom/issues/3751). The ScopeDescriptor object will be a container for these kinds of things. The `ScopedDescriptor`s returned from the editor can contain the file path, which config can deal with accordingly. 

This is added in a pretty non intrusive way. Similar to text-buffer `Range`, there is a `fromObject` method. So everything that takes a `ScopeDescriptor`, can still take an array of strings. 

Closes #3751
Maybe it's worth noting somewhere in here that many APIs that require a scope descriptor can also take an array?