feat(metadata extractor): Cache the fieldMetadataExtractor for greater performance

Dartium tests run in 7.6s; down from 18.2s.
dart2js on Chrome runs in 2m instead of 3m
chore(bootstrap): rename: ngDynamicApp -> dynamicApp; NgApp -> Application
fix(export): Add missing NgController to angualr.dart
test(ng_model): detect browsers that do not support `simulateTypingText`

Detect browsers that do not support `simulateTypingText` and skip tests
that rely on it.

Closes #814
fix(docs): reenable broken doc generation
fix(watch_group): remove debugging print statement
test(scope_spec): fix descriptions and typo
chore(selector): Remove the selector.match() function.  Clean up tests.
fix(dirty-checking): handle simultaneous mutations and ref changes

This applies to both maps and lists/iterables.

Consider the case when one is watching an expression, say, `items`, that
evaluates a list.  Now consider the case when one both mutates that
list and also updates `items` to point to a different list.  In this
case, the reported changes should be between the earlier observed
collection and the newly observed collection.  The previous
implementation is buggy.  It first observes that the original list was
mutated and then observes that the reference to the list was updated to
a different list.  The changes it reports are the differences between
the mutated list and the new list which is incorrect.

This commit fixes the bug by noticing the case when both a mutation of
the previously tracked sequence and a ref change occurs and resets the
change record to undo the recording of the mutation.
test(scope_spec): fix typo
fix(export): Add missing NgController to angualr.dart
feat(NgAnnotation): Use `module` parameter to publish types.

`module` parameter in NgAnnotation (and other annotations that extend
it) can be used to publish types. The change is a bit more wordy
but it is a lot more powerful.

BREAKING CHANGE: `publishTypes` parameter is removed.

@NgDirective(
  publishTypes: [FooInt]
)
class Foo extends FooInt {
}

becomes

@NgDirective(
  module: Foo.module,
  visibility: NgDirective.LOCAL_VISIBILITY
)
class Foo extends FooInt {
  module() => new Module()
    ..factory(FooInt, 
              (i) => i.get(Foo), 
              visibility: NgDirective.LOCAL_VISIBILITY)
}


Closes #779