fix($parse): correctly assign expressions who's path is undefined and that use brackets notation

Closes #8039
style(AngularPublic): add whitespace to jshint block

Closes #8360
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
feat(ngModel): provide support for promise-based validators
feat(ngModel): provide validation API functions for sync and async validations