fix(compiler): always wrap views into an own `<template>` element

This is needed to allow view instantiation also in browsers that
don’t support the `<template>` element and because of this would
return elements from the content of `<template>` elements when
using `element.querySelectorAll`.

Also stores the `elementBinder.nestedProtoView` correctly
when a template directive was used on a `<template>` element.
fix(compiler): allow identifiers with `-` in the template bindings as keys.
feat(viewport): add initial integration test for template directives
feat(Change Detection): Add support for keyed access
feat(views): (de)hydration of views.

Dehydrated views are views that are structurally fixed, but have no
directive instances and are not not being dirty-checked.

During hydration of a view, the context for watched expressions is set,
thus allowing for local bindings.