feat(Key) Add support for binding values and types using annotations

Allow better configuration of how types are bound. This enables bindings of type:

```
class First() {
  const First();
}
class A {}
class AFirst implements A { }
class Klass {
  Klass(@First() A);
}
new Module()..type(A, withAnnotations: [First], implementedBy: AFirst)
```

Closes #46