docs(guide/understanding_controller): correct grammar

Add the word "to" to improve grammar.

Closes #4698
docs(CONTRIBUTING.md): add more info for contributors

Closes #4636
docs(api): improve grammar

Closes #4690
docs(guide/e2e-testing): fix typo

Closes #4700
docs($route): change example module name

The name of the example module is `ngView`, which might cause needless confusion.
Changed name to `ngViewExample`, which should make it clearer.

Closes #4702
docs(tutorial): add instructions to install karma plugins
docs($route): split over-length line
docs(guide/injecting-services): fix indentation in example

Closes #4714
docs(api): fix broken links

Closes #4705
docs(api): fix broken links
feat(Angular.js): add externs file for Closure Compiler

This adds an (incomplete) externs file for use with the Closure Compiler. Users
can pass this as -extern to the compiler pass to get type checking and protect
their AngularJS use against property renaming in advanced compilation mode.
fix(ngIf): ngIf removes elements dynamically added to it

When using ngIf with ngInclude on the same element, ngIf previously did not remove
elements added by ngInclude. Similarly, when using ngIfStart/End, ngIf will miss
elements added between the start/end markers added after ngIf is linked.

This commit changes the behavior of ngIf to add a comment node at the end of its
elements such that elements between the starting comment and this ending comment
are removed when ngIf's predicate does not hold.
chore: move getBlockElements to Angular.js
chore($compile): remove special case for ngIf and ngRepeat
feat($parse): secure expressions by hiding "private" properties

BREAKING CHANGE:
This commit introduces the notion of "private" properties (properties
whose names begin and/or end with an underscore) on the scope chain.
These properties will not be available to Angular expressions (i.e. {{
}} interpolation in templates and strings passed to `$parse`)  They are
freely available to JavaScript code (as before).

Motivation
----------
Angular expressions execute in a limited context.  They do not have
direct access to the global scope, Window, Document or the Function
constructor.  However, they have direct access to names/properties on
the scope chain.  It has been a long standing best practice to keep
sensitive APIs outside of the scope chain (in a closure or your
controller.)  That's easier said that done for two reasons: (1)
JavaScript does not have a notion of private properties so if you need
someone on the scope chain for JavaScript use, you also expose it to
Angular expressions, and (2) the new "controller as" syntax that's now
in increased usage exposes the entire controller on the scope chain
greatly increaing the exposed surface.  Though Angular expressions are
written and controlled by the developer, they (1) typically deal with
user input and (2) don't get the kind of test coverage that JavaScript
code would.  This commit provides a way, via a naming convention, to
allow publishing/restricting properties from controllers/scopes to
Angular expressions enabling one to only expose those properties that
are actually needed by the expressions.
fix(ngEventDirectives): parse expression only once during compile phase.
docs($location): update paramValue description for search()

search() supports an array for paramValue, but this is not described in the docs.
docs($parse): Fix typo
docs(guide/contribute): remove redundancy and link to CONTRIBUTING.md
style: remove ws