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