feat(directive_injector): build and maintain a tree of directive injectors

* Change the DirectiveInjector class to store a list of children.
* Change the View store a list of root directive injectors.
* Update ViewPort to keep the view tree and the directive injector tree in sync.
It is used in tests. In general, I don't like making fields public just just to simplify tests. But since DirectiveInjector is not part of Angular's public API, I thought it is acceptable here.