perf(view factory): Compute DI Keys ahead of time

4% improvement in TreeComponent benchmark

For #1081

Closes #1085
fix(element binder): fix memory leak with expando value holding onto node

Expando keys are weak references but the values are not.  The
ElementProbe value holds strong references to the node and the injector
keep it from being garbage collected.
fix(transcluding component factory): allow removing components that have no content to transclude
feat(element binder): Use a child scope instead of Scope.watch(context:o)

This is the only place where Scope.watch(context:o) is used and it is
in the way of optimizations.

For #1086
feat(scope): Remove Scope.watch's context parameter.

BREAKING CHANGE

Scope.watch can no longer switch context.  Instead of saying

    scope.watch(expression, (v, _) { }, context: o);

Create a new isolate child scope

    scope.createChild(o).watch(expression, (v, _) { });
refactor(Scope): Pull ASTParser out of Scope into it's own library

For #1086
chore(ASTParser): Clean up and refactor the ASTParser

-> Make it injectable
-> Remove try/catch statements are extra state
-> Rename AstParser -> ASTParser
-> Rename ExpressionVisitor -> _ExpressionVisitor

For #1086
feat(scope): Expose Scope.watchAST as a public API

For #1086
feat(compiler): Precompute Scope.watch AST for TextMustache

For #1086
feat(compiler): Pre-compile Scope.watch ASTs for attribute mustaches

For #1086
feat(compiler): Precompute Scope.watch ASTs for bindings

For #1086