[WIP] Unify separate settings implementations, use chrome.storage everywhere

This PR

* combines the two settings implementations (content scripts vs. background scripts) into one settings 'library', usable everywhere;
* uses `chrome.storage` to sync changes automatically, which lets us stop constantly requesting settings from the background page;
* syncs multiple changes in one go, rather than one-by-one, which greatly reduces the number of write operations we need;
* moves code not directly related to settings management (eg. parsing search engine definitions) out to the appropriate places in the codebase;
* absorbs the `Sync` 'module' into settings.coffee; much of the `Sync` code directly uses/modifies variables from `Settings`, so they might as well be together.

Still todo:

[ ] Fix tests.