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
4. Distance
5. Text nodes
This is not the right place to assign the appInjector. The issue is that Views can be attached and than re-attached. During the re-attachment we have to go through and recreate all of the directive instances. It is during that point when appInjector should be assigned since only than we can say for sure what it is.