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
test($http): fix typo in spec name

'applyAapply' -> 'applyAsync'.

Closes #9323
docs(CONTRIBUTING.md): Added a not about type

It's important that we let people use the GitHub editing interface without being 100% strict about how to name the commit changes. Otherwise, it is basically a barrier to entry and highly discouraging for new people who may just be trying to fix a spelling error. Since it is possible for contributors to edit the commit message before merging it into master, for people who are new to the commit styling system, we should be lenient about minor infractions like forgetting to put docs: in front of a message. 

CF: https://github.com/angular-ui/bootstrap/pull/2635#issuecomment-57117579
refactor($scope): prevent multiple calls to listener on `$destroy`

Prevent isolated scopes from having listeners that get called
multiple times when on `$destroy`
fix($compile): Resolve leak with asynchronous compilation

Stop an asynchronous compilation when this is performed on an
already destroyed scope

Closes #9199
Closes #9079
Closes #8504
Closes #9197
chore(e2e): bump protractor to version 1.3.1
chore(npm-shrinkwrap): update to dgeni-packages 0.10.0
fix(select): make ctrl.hasOption method consistent

Prior to this fix, options added to a select by ngOptions would not cause
`selectCtrl.hasOption` to return `true`

Closes #8761