feat(view): add support for instantiation of nested views.

Includes shadowDom creation and integration tests for nested components.
We should test more here:

- that the component directive gets an instance of a service it declares
- that a directive in the component template can get a hold of the component directive
- that a directive in the component template can get a hold of the service

Idea how to do this:
- create `SomeComponent` and `NeedsSomeComponent` directives
- create `SomeComponentService` service that is referenced by the `SomeComponent` component
- all should store local variables
- check the instances using `view.elementInjectors`
- check the nested view using `elementInjector.get(View)` and looping over `view.elementInjectors`.