Implement dynamic di

This is an initial implementation of DI.

Please review only the second commit. The first commit will be gone once #45 is merged.

There are a few reasons why I prefer this approach over `module.bind`.

1. Module does not have any responsibilities apart from collecting bindings. Not having this abstraction makes the API a bit simpler. You only have Injector and Binding.

2. This approach makes patterns very explicit. When using `module.bind`, there are some combinations of keys that are valid and some that are not (e.g., "toFactory and inject" is good, and "toValue and inject" is not). When using BindingBuilder there are no invalid combinations.

3. It makes declaring app services nicer:

```
@Component(
	appServices: [Foo, Bar]
)
```

instead of

```
@Component(
	appServices: setupAppServices
)

where `setupAppServices` is: 

setupAppServices(m) {
	m.bind(Foo)
	m.bind(Bar)
}
```

In Dart those have to be const expressions, so it won't matter that much. In JS though it makes the API nicer.

I think the two approaches are "isomorphic". Meaning that you can build one API on top of the other one.