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
One thing we could do here is to check that the predicate does not change the list (à la [Dart](https://github.com/dart-lang/bleeding_edge/blob/7301dd1f233d9a2b042bea83d467eae53b2c62f4/dart/sdk/lib/collection/list.dart#L112)).

An assert transformer (got the idea from @arv talk but I don't think it's built in traceur for now) might help here.

It should probably be handled in separate PRs, I'll double check traceur support for assert and create issue(s) as needed.