Refactor bindings scheme handlers, fix issues with type as hash key.

The scheme handler support is now done via injection. This is good
because it reuses existing functionality rather than providing yet
another way of loading user code. A special injector only used while
creating the real injector is created (called boot_injector).

The scheme handlers are now broken out into separate ruby files (they
were earlier in the BindingsComposer). The broken out handlers are now
lazily loaded by an injector.

A flaw was found in the type system; types where not usable as hash
keys. This commit also fixes this by adding hash and eql methods to
the types.
Add extension capability to binder_config.yaml

This makes it possible to specify scheme_handlers and hiera_backends by
binding scheme/symbolic name to a runtime class name.

These are loaded by the injector when required.

Adds tests, and fixes issues.