fix(ngModel): ensure validation occurs when the model value changes upon digest
feat(forms): generate ng-submit-valid / ng-submit-invalid CSS classes upon form submission
chore(style) clean up warnings

Closes $564
chore(perf): fix perf

Closes #568
chore(doc): delete duplicate * - [ng-blur] comment

Closes #566
fix(scope): Use Iterable instead of List

Use element comparison instead of reference comparison when observing changes to Iterables in a scope.

Closes #565
doc(developer): Update the developer guide with setup experiences.

Closes #562
fix(ng-attr): remove camel-cased dom attributes

See: https://github.com/angular/angular.dart/pull/560#discussion_r9718101

Closes #567
refactor(pub): Simplify support for pub transformers

Slight refactoring of expression extractor to make it easier to drive from Dart transformers.

Primary change is exposing parseHtml on html_extractor to allow externally driving it rather than using a crawler.

Closes #537
chore(analyzer): update version number

Updating analyzer version to 0.11

Updated analyzer has a number of convenience methods that make it easier with code gen. No code changes needed.

Closes #527
fix(ng-pluralize): use ${..} to interpolate

See: https://github.com/angular/angular.dart/pull/528#issuecomment-34892892

Closes #572
fix(ngModel): process input type=number according to convention, using valueAsNumber

Closes #574, Closes #575, Closes #576. 

Previous patches of relevance: #527, #415

Closes #577
fix(DateFilter): fix a wrong type

Closes #579
fix(compiler): support filters in attribute expressions

Fixes #571
Closes #580
style(ng-repeat): fix a typo shalow -> shallow (fix #581)

Fixes #581
style(ng-repeat): code cleanup

Closes #582
fix(di): Upgrade dependency of package di preventing problems with dart sdk 1.1 resolves #408

Fixes #408
Closes #583
fix(ngModel): ensure checkboxes and radio buttons are flagged as dirty when changed

Closes #569
Closes #585
chore(release): release v0.9.8
chore(perf): Get watch_group_perf running on Dart2js

DARTIUM:
========
fieldRead: => 58,240 ops/sec (17 us) stdev(0.0028)
fieldReadGetter: => 1,480,972 ops/sec (1 us) stdev(0.08649)
mapRead: => 1,720,752 ops/sec (1 us) stdev(0.05972)
obj.method?(): => 93,362 ops/sec (11 us) stdev(0.00549)
obj.method?(obj): => 79,881 ops/sec (13 us) stdev(0.00301)
add?(a, a): => 1,342,560 ops/sec (1 us) stdev(0.10907)

change-detect List[1000](RunTime): 61.251990689697415 us.

DART2JS:
========
fieldRead: => 372,422 ops/sec (3 us) stdev(0.0109)
fieldReadGetter: => 1,038,660 ops/sec (1 us) stdev(0.19283)
mapRead: => 721,103 ops/sec (1 us) stdev(0.04434)
obj.method?(): => 172,910 ops/sec (6 us) stdev(0.00801)
obj.method?(obj): => 161,329 ops/sec (6 us) stdev(0.00598)
add?(a, a): => 2,432,982 ops/sec (0 us) stdev(0.17624)

change-detect List[1000](RunTime): 145.12734924896597 us.