feat(ElementInjector): implement ElementInjector

Initial implementation of ElementInjector.

Works:
1. The creation of proto element injector trees
2. Bindings
3. The instantiation of element injectors
4. The instantiation of directives
5. Visibility: Parent and Ancestor
6. Delegation to application injectors
7. Error handling

Missing features:
1. Handling components.
2. Setting "special" properties (e.g., Element, View).
3. Cycle detection

It is different. In the DI module there is a distinction between `Key` and `Dependency`.
```
class NeedsDirective {
	constructor(@NotImportant @Parent directive:Directive){}
}
```
In this example DI creates a Dependency object for the directive parameter. That dependency, in addition to a key, has a list of dependency properties. Only annotations implementing `DependencyAnnotation`  will be added to the list.

Suppose `Parent` extends `DependencyAnnotation` and `NotImports` does not. Then the dependency will be constructed as follows:

```
new Dependency(Key.get(Directive), [new Parent()])
```
I need to start writing docs :)