feat(module): new binding syntax

bind(Foo, annotatedWith: a, toValue: new Foo(), visibility: v);
bind(Foo, annotatedWith: a, toFactory: (i) => new Foo(), visibility: v);
bind(Foo, annotatedWith: a, toImplementation: FooImpl, visibility: v);
bind(Foo, annotatedWith: a, visibility: v);

type, value and factory methods are marked as deprecated.

Closes #90
refactor(key): moved Key into its own library to hide internals

Fixes #92