docs(guide/Conceptual Overview): change "a" to "an" before "ng-controller"

Closes #9895
docs(ngModelOptions): minor grammer error

Closes #9928
docs(guide/Modules): missing "a" in "a collection"

Closes #10001
docs(minerr/unpr): fix code example

Closes #10000
docs(ngModel.NgModelController) use `$evalAsync` instead of `$apply` for event handling

Have the apply called safely during events by using `$evalAsync` rather than `$apply`
This will help ensure that an apply for a user directive is not called during a digest cycle.

Closes #9891
docs(guide/Index): add book AngularJS UI Development

Matthias and I wrote a book on AngularJS which might be helpful for Angular developers.

Merci~!

Closes #9971
feat($routeProvider): allow setting caseInsensitiveMatch on the provider

Fixes #6477

Closes #9873
docs($q): remove IE8-specific notice

Closes #10008
refactor($parse): don't use bind-once interceptor for non-bind-once expressions

Side-effects:
  - Logic for allOrNothing watches now lives in $interpolate rather than $parse

Credit to @jbedard for idea to remove $watch interceptors craziness from $interpolate. Even though
it technically didn't actually work, it was worth a shot, and helped clean things up a bit. Go team!

Closes #9958
Closes #9961
docs($q): missing finally notifyCallback API

finally allows for notifyCallback and is missing in the Docs
https://github.com/angular/angular.js/blob/v1.3.2/src/ng/q.js#L288

Closes #10010
docs($controller): mention "controller as" syntax

Closes #10011
docs(guide/expressions): replace curly quotes with straight quotes in code example

REAL QUOTES HAVE CURVES

Closes #10017
docs($route): fix description of the caseInsensitiveMatch property

Closes #10028
docs(guide/expressions): clarify regexp literals usage in expressions

Closes #10026

Closes #10030
refactor($parse): separate tokenizing vs parsing more
Fixes `a.b` and `a .b` generating different getterFns
Fixes `{'': ...}` turning into `{"''": ...}`
Fixes `{.: ...}` parsing as `{'.': ...}` instead of throwing
Fixes #9131
refact(angular.bind): use `concat()` rather than duplicating code

Closes #4200
fix(ngModel): don't run parsers when executing $validate

Previously, $validate would execute the parsers to obtain a
modelValue for validation. This was necessary, because a validator
that is called outside of model / view update (e.g. from an observer)
otherwise might only an undefined modelValue, because a previous
view update has found a validation $error and set the model
to undefined (as is tradition in angular)

This is problematic as validators that are run immediately after
the ngModelController initializes would parse the modelValue
and replace the model, even though there had been no user input.

The solution is to go back to an older design: the ngModelController
will now internally record the $$rawModelValue. This means a model
or view update will store the set / parsed modelValue regardless
of validity, that is, it will never set it to undefined because of
validation errors.

When $validate is called, the $$rawModelValue will passed to the
validators. If the validity has changed, the usual behavior is kept:
if it became invalid, set the model to undefined, if valid,
restore the last available modelValue - the $$rawModelValue.

Additionally, $validate will only update the model when the validity
changed. This is to prevent setting initially invalid models other
than undefined to undefined (see #9063)

Fixes: #9063
Fixes: #9959
Fixes: #9996
Fixes: #10025

Closes: #9890
Closes: #9913
Closes: #9997