docs(ngBind): irrelevant text removed from ngBindHtml’s example

The ngBindHtml’s example had a copied line from ngBindTemplate’s that’s irrelevant here.

Closes #8668
revert: refactor($compile): automatically append end comment nodes to all element-transclusion templates

This reverts commit 0d608d041f37a659d8d8ba7a9b688e132587035d.

The commits caused more breaking changes at Google than initially expected and since its
benefit is small, so it's not worth keeping.
docs(*): use @description instead of @returns for properties

Dgeni-packages was not actually rendering the `@returns` text.

Closes #8639
docs($compile): correct documentation for directive controller `^` notation

`^` searches the element and its parents, not exclusively the element's parents. This confuses
a lot of people :(

Closes #8622
docs(guide/di): correct a few awkward sentences

Closes #8678
fix($sanitize): sanitize javascript urls with comments

Closes #8274
fix($location): don't call `indexOf()` of undefined `href` attribute

Closes #7721
Closes #8681
perf($interpolate): do not keep empty separators

Do not keep empty separators and keep references to where
each expression goes
perf($rootScope): do not use `Function::call` when not needed

When a `$watchGroup` delegates the call to a `$watch`, there is no
need to keep the context of `this`
fix($compile): update the jQuery .context when an element is replaced by replace:true directive

.context is a deprecated jQuery api still being used by at least live() queries, so
we need to keep it in up to date during replacement.

Because of the if check, we can be sure that we replace the context only when jQuery is being
used and the context property is set to the element being replaced.

Closes #8253
Closes #7900
fix($location): rewrite relative URI correctly if path==='/' in legacy html5Mode

Currently, legacy browsers get to use a clever scheme for resolving relative URIs in html5Mode,
and resolve the URI relative to $location.path().

Currently, $location.path() can be '/' under certain circumstances, which means that when we
split $location.path() on '/' and later join by '/' after adding another path component,
we end up with '//pathComponent'. $$rewrite fails to deal with this correctly, and effectively
the $location is never changed from the root path.

This CL corrects this by ensuring that the duplicate '/' situation does not occur when resolving
relative URIs.

Closes #8684
perf($parse): don't bind filters to a context

This change gives us ~10% boost in Chrome, less or nothing in other browsers.

BREAKING CHANGE:  `this` in filters is now undefined and no longer the scope

It's a bad practice for filters to have hidden dependencies, so pulling stuff from scope directly
is not a good idea. Scope being the filter context was never documented as public api, so we don't
expect that any significant code depends on this behavior.

If an existing filter has a dependency on the scope instance, the scope reference can
be passed into the filter as a filter argument (this is highly discouraged for new code):

Before: `{{ user.name | customFilter }}`
After: `{{ user.name | customFilter:this }}`
docs($compile): fix documentation for ?^ controller search

Fixed typo: 'parents parents' to 'parents'

Closes #8690
docs($cacheFactory): prevent example breaking on key update

The example for $cacheFactory breaks when a user tries to update a value for a key.
Setting a new value for an existing key results in duplicate key entries in the key array, thus
breaking the ng-repeat directive. With this fix the key is only added if it isn't contained in the
cache.

Closes #8214
docs(ngMock): note that inject/module helpers only defined for jasmine / mocha

Closes #8694
fix(linky): handle quotes around email addresses

Closes #8520
docs(ngDisabled): clarify "don't do this" example

It's not clear until you read the whole thing that it's an explanation
of what *not* to do and why, so if you scan the page from the top, you
may use this bad solution.
fix(forEach): match behaviour of Array.prototype.forEach (ignore missing properties)

Array.prototype.forEach will not invoke the callback function if the properety is not present in the
object. Because of this, we have the illusion of not iterating over non-added properties in a sparse
array.

From ECMAScript:

9. Repeat while k < len
     a. Let Pk be ToString(k).
     b. Let kPresent be HasProperty(O, Pk).
     c. ReturnIfAbrupt(kPresent).
     d. If kPresent is true, then
            i. Let kValue be Get(O, Pk)
            ... (steps for invoking the function and aborting if it throws)

Closes #8510
Closes #8522
Closes #8525
fix(minErr): encode btstrpd error input to strip angle brackets

The $sanitize service was returning an empty string to the error page
because the input was usually a single html tag (sometimes it could be
`document`). This fix replaces angle brackets with html entities.

Closes #8683
fix(copy): clear array destinations correctly for non-array sources

Closes #8610
Closes #8702