ext: Convert commands to use new registry system.

Creates a placeholder registry using the existing hooks, and updates the
commands to use these. The actual registry still needs to be created.
ext: Add basic global registry and switch to Extension.setup()
local: Add local/data_dir config value.

Not in use yet but, needed for future changes planed in this branch.
ext: Move away from global registry to ease testing.

Extension's setup method are now passed the active registry allowing them to
"steal" a list of the registry items they care about. In the case of commands
the registry is passed via args.registry.
local: Add new library interface to local backend.

This forms the basis of our plugable local libraries that we intend to ship.
local: Remove local-json as a split out extension.

Will be re-added using the new library interface. This commit does break tests.
local: Add local library provider back

- Re-add a local library provider that uses our new library interface
- Re-add our json library using the new interface
- Hardcode these to use each other for now
- Scanner bit is still missing, will re-add in one of the next commits
- Bypassed test for #500 for the time being
local: Add local/library config value

- Updated library provider to support missing library
- Added config value to select local library provider
- Updated tests to use library config value
local: Update library interface

- Add track iterator for use in scanner
- Update lookup to only return a single track
local: Update scanner to use new library interface.
local: Make sure excluded file extension case does not error out
audio: Workaround fact that genre can sometimes be a list
local: Review comments
Merge branch 'develop' into feature/extension-registry
local: Update local library interface.

Refactored interface to incorperate lessons learned so far trying to implemend
a whoosh based local library.

Search now has a limit and an offset to account for fact that we need to start
doing pagination of results properly. Updates now have begin, flush and close
calls. Additionally I've added clear method to allow for easily nuking the data
store.
local: Add flush threshold to scanner.

Instead of triggering every 1000th query, this is now configurable and also
triggers the flush call to the library.
local: Add --clear flag to scanner.
local: Add --limit to scanner.
local: Move --clear to it's own sub-command.

Split library setup out into a helper and move the clear option to a command.
core: Re-add one uri scheme per backend constraint.