Cache entire merged property sets

Now that property sets are deeply merged, caching
individual property values results in too many cache
misses. This way, properties are only merged once per
scope between writes.
The cache might get stuck with a hash that doesnt apply to the options passed. i.e. these will return the same thing always cause it's cached in the first call, right?

```
getPropertyValue([...], 'editor.useShadowDom', sources: ['user-config']) # cache
getPropertyValue([...], 'editor.useShadowDom', excludeSources: ['user-config']) # get the cached val; improper value.
``