fix(ngModel): do not parse undefined viewValue when validating

Previously, if a viewValue had not yet been set on the element, it could incorrectly produce a
parse error.

This change prevents the parsers from running if a view value has not yet been committed.

Closes #9106
Closes #9260
test(ngModel): rename test to better reflect what is being tested

I meant to do this in before 92f05e5a5900713301e64373d7b7daa45a88278b landed, sorry u_u
chore(docs): ensure DI annotations are in place
chore(docs): minify javascript
chore(protractor): annotate $animate to allow tests to run under strict-di
chore(docs): improve logo rendering performance
chore(docs): remove unused code
test(input): test that number validates with unspecified viewValue

Adds an additional test verifying that a number which is not required will validate successfully
when ngModelCtrl.$validate() is called. Before 92f05e5 landed, this would have failed because of
a parse error.

Closes #9193
docs(guide/index): add book AngularJS: Novice to Ninja

I wrote a book on AngularJS (AngularJS: Novice to Ninja).

Closes #9293
perf(benchmark): add ngBindOnce benchmarks to largetable-bp
chore(Angular): drop support for Opera < 15

Closes #8589
docs(guide/accessibility): explain ngAria
chore(docs): fix links to github

Closes https://github.com/angular/code.angularjs.org/issues/13
feat($compile): optionally get controllers from ancestors only

Implement option to strengthen require '^' operator, by adding another '^'.

When a second '^' is used, the controller will only search parent nodes for the
matching controller, and will throw or return null if not found, depending on
whether or not the requirement is optional.

Closes #4518
Closes #4540
Closes #8240
Closes #8511
feat(Scope): allow the parent of a new scope to be specified on creation

This enables us to place transclude scopes more accurately in the scope hierarchy.
fix($compile): connect transclude scopes to their containing scope to prevent memory leaks

Transcluded scopes are now connected to the scope in which they are created
via their `$parent` property. This means that they will be automatically destroyed
when their "containing" scope is destroyed, without having to resort to listening
for a `$destroy` event on various DOM elements or other scopes.

Previously, transclude scope not only inherited prototypically from the scope from
which they were transcluded but they were also still owned by that "outer" scope.
This meant that there were scenarios where the "real" container scope/element was
destroyed but the transclude scope was not, leading to memory leaks.

The original strategy for dealing with this was to attach a `$destroy` event handler
to the DOM elements in the transcluded content, so that if the elements were removed
from the DOM then their associated transcluded scope would be destroyed.

This didn't work for transclude contents that didn't contain any elements - most
importantly in the case of the transclude content containing an element transclude
directive at its root, since the compiler swaps out this element for a comment
before a destroy handler could be attached.

BREAKING CHANGE:

`$transclude` functions no longer attach `$destroy` event handlers to the
transcluded content, and so the associated transclude scope will not automatically
be destroyed if you remove a transcluded element from the DOM using direct DOM
manipulation such as the jquery `remove()` method.

If you want to explicitly remove DOM elements inside your directive that have
been compiled, and so potentially contain child (and transcluded) scopes, then
it is your responsibility to get hold of the scope and destroy it at the same time.

The suggested approach is to create a new child scope of your own around any DOM
elements that you wish to manipulate in this way and destroy those scopes if you
remove their contents - any child scopes will then be destroyed and cleaned up
automatically.

Note that all the built-in directives that manipulate the DOM (ngIf, ngRepeat,
ngSwitch, etc) already follow this best practice, so if you only use these for
manipulating the DOM then you do not have to worry about this change.

Closes #9095
Closes #9281
docs(guide): update directive guide to not imply ngView is part of core
docs(guide): update compiler guide with minor grammatical fixes

Minor changes to grammar. Changed sentence "But the declarative language
is also limited, since it does not allow you to teach the browser new syntax."
to now read "However, the declarative language is also limited, as it does not
allow you to teach the browser new syntax."
However is a less informal start to a sentence, and replacing "since"
correctly references extent/degree rather than comparison of time.
refactor($parse): change 'this' to a $parse keyword instead of scope field

BREAKING CHANGE:
- $scope['this'] no longer exits on the $scope object
- $parse-ed expressions no longer allow chaining 'this' such as this['this'] or $parent['this']
- 'this' in $parse-ed expressions can no longer be overriden, if a variable named 'this' is put on the scope it must be accessed using this['this']

Closes #9105
perf($rootScope): moving internal queues out of the Scope instances

Closes #9071