test(select): refactor option elements expectations to use `toEqualOption` matcher

By using a new matcher our tests become less brittle with respect to unimportant
extra attributes.
fix(select): ensure the label attribute is updated in Internet Explorer

Only changing the `<option>` text value is not enough to trigger a render
change in IE. We need to explicit update the `label` property too.

Closes #9621
Closes #10042
docs(guide/accessibility): Content updates

Also includes new section on ngMessages
docs(ngAria): Add Usage Details and Examples

Closes #10031
docs(nav): highlight current nav-index-listing

Color the current nav-index-listing item dark red
to make it easier to know where you are.

Closes #9970
Closes #9974
fix($http): don't parse single space responses as JSON

Closes #9907
feat($location): allow to location to be changed during $locationChangeStart

Closes #9607
Closes #9678
fix(minErr): stringify non-JSON compatible objects in error messages

Fix the JSON stringification to output a more meaningful string when an
object cannot be normally converted to a JSON string, such as when the
object contains cyclic references that would cause `JSON.stringify()`
to throw an error.

Closes #10085
fix(ngRepeat): support cyclic object references in error messages

Now that `minErr` can cope with objects that cannot be normally stringified
to JSON, just pass the error arguments straight through without trying to
stringify them first.

Closes #9838
Closes #10065
Closes #10085
fix($rootScope): handle cyclic references in scopes when creating error messages

Use the new private function `stringify` to convert scope values to strings,
since this can cope with cyclic references and other oddities.

Closes #10085
docs(tutorial/step-4): "unknown" option is actually blank

The name 'unknown' doesn't appear as a choice, the new choice is just blank.
Side note: once I choose one of the non-blank options, I no longer see the blank option.

Closes #10079
docs(tutorial/step-5): include sort and filter in json view experiment

Closes #10082
docs($anchorScrollProvider): remove repeated word

Closes #10093
chore(docs): add favicon to docs app
test(ngModel): group validation tests
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
Closes: #10048
fix(NgModelController): typo $rawModelValue -> $$rawModelValue
docs(CHANGELOG): add 1.3.3 changes
test($anchorScroll): add e2e tests