feat(http): allow caching for JSONP requests

Closes #1947
Closes #8356
docs(tutorial): clarify sentence in step 02

Separate two sentences with a period, and clarify the wording by making it less technical: "to the DOM"
vs "to the <body> tag".

Closes #8394
docs(tutorial/step-2): warn reader not to minimise browser that Karma's running on

Closes #8386
docs(dateFilter): fix milliseconds example

Closes #8389
fix($location): add semicolon to whitelist of delimiters to unencode

Some servers require characters within path segments to contain semicolons,
such as `/;jsessionid=foo` in order to work correctly. RFC-3986 includes
semicolons as acceptable sub-delimiters inside of path and query, but $location
currently encodes semicolons. This can cause an infinite digest to occur since $location
is comparing the internal semicolon-encoded url with the semicolon-unencoded url returned
from window.location.href, causing Angular to believe the url is changing with each digest
loop.

This fix adds ";" to the list of characters to unencode after encoding queries or path segments.

Closes #5019
fix(ngSanitize): ensure `html` is a string in htmlParser()

Previously, $sanitize(nonString) would throw. Now, the type is converted to a string before any work
is done.

Closes #8417
Closes #8416
fix(jqLite): fix regression where mutating the dom tree on a event breaks jqLite.remove

Closes #8359
revert(select): avoid checking option element selected properties in render

This reverts commit dc149de9364c66b988f169f67cad39577ba43434. That commit fixes a bug caused by
Firefox updating `select.value` on hover. However, it
causes other bugs with select including the issue described in #7715. This issue details how
selects with a blank disabled option skip to the second option. We filed a bug
with Firefox for the problematic behavior the reverted commit addresses
https://bugzilla.mozilla.org/show_bug.cgi?id=1039047, and alternate Angular fixes are being
investigated.

Closes #7715 #7855
test(select): add test against updating selected property on digest with no change event

Commit dc149de9364c66b988f169f67cad39577ba43434 was reverted to fix regressions #7715 and #7855.
This commit introduced this test case and a corresponding fix for preventing the update of the
selected property of an option element on a digest with no change event. Although the previous fix
introduced regressions, the test covers a valid issue and should be included.
test(select): add test cases for selects with blank disabled options

An earlier commit dc149de9364c66b988f169f67cad39577ba43434 caused an error where the first option of
a select would be skipped over if it had a blank disabled value. These tests demonstrate that with
that commit in place, blank disabled options are skipped in a select. When the commit is reverted,
the correct behavior is seen that the blank disabled option is still selected in both selects
marked with required and those that have optional choices.

Relates to #7715
test(select): add test of updating the model because of ng-change

A regression #7855 was introduced by
https://github.com/angular/angular.js/commit/dc149de9364c66b988f169f67cad39577ba43434
This test ensures that reverting that commit fixes this regression.
In the regression, changes to a bound model in ng-change were not propagated back to the view.

Test for #7855
test(select): add extra expectations and comments for clarity
fix(select): do not update selected property of an option element on digest with no change event

The `render()` method was being invoked on every turn of the digest cycle,
which was inadvertently updating the DOM even when a `change` event had
not been triggered.

This change only calls the `render()` method when `ctrl.$render()` is called,
as part of the NgModelController` lifecycle and when the `modelValue` has
significantly changed.

Closes #8221
Closes #7715
docs(input): fix small grammatical error

Closes #8422