feat(minErr): allow specifying ErrorConstructor in minErr constructor

In some cases, the type of Error thrown by minErr is meaningful, such as in $q where a TypeError
is sometimes required. This fix allows providing an error constructor as the second argument to
minErr, which will be used to construct the error that gets returned by the factory function.
chore($q): convert thrown Error to $minErr when calling $q constructor without resolver
chore($q): replace plain TypeError with minErr+TypeError in cyclical resolve check
docs($q): correct @ngdoc annotations for methods of $q

Closes #8782
Closes #8784
chore(tests): use jquery again in e2e tests

jQuery was not included in e2e tests, but we did not notice it
as Angular fell back to jqlite…
feat(filter): allow to define the timezone for formatting dates

Angular used to always use the browser timezone for
`dateFilter`. An additional parameter was added to allow to use
`UTC` timezone instead.

Related to #8447.
fix(input): use year 1970 instead of 1900 for `input[time]`

BREAKING CHANGE:

According to the HTML5 spec `input[time]` should create dates
based on the year 1970 (used to be based on the year 1900).

Related to #8447.
feat(input): allow to define the timezone for parsing dates

Angular used to always use the browser timezone when parsing
`input[date]`, `input[time]`, … The timezone can now be changed
to `UTC` via `ngModelOptions`.

Closes #8447.
fix(input): allow to use seconds in `input[time]` and `input[datetime-local]`

The HTML5 spec allows to use seconds for `input[time]` and `input[datetime-local]`,
even though they are not displayed by all browsers.

Related to #8447.
refactor(nodeName_): remove IE8 specific branch
perf(nodeName_): simplify the code and reduce the number of DOM calls
refactor(hashKey): don't generate memory garbage

we now store both the object type and the id as the hashkey and return it for all objects.

for primitives we still have to do string concatination because we can't use expandos on them to
store the hashkey
fix(ngModel): treat undefined parse responses as parse errors

With this commit, ngModel will now handle parsing first and then validation
afterwards once the parsing is successful. If any parser along the way returns
`undefined` then ngModel will break the chain of parsing and register a
a parser error represented by the type of input that is being collected
(e.g. number, date, datetime, url, etc...). If a parser fails for a standard
text input field then an error of `parse` will be placed on `model.$error`.

BREAKING CHANGE

Any parser code from before that returned an `undefined` value
(or nothing at all) will now cause a parser failure. When this occurs
none of the validators present in `$validators` will run until the parser
error is gone.
feat(ngModel): provide validation API functions for sync and async validations

This commit introduces a 2nd validation queue called `$asyncValidators`. Each time a value
is processed by the validation pipeline, if all synchronous `$validators` succeed, the value
is then passed through the `$asyncValidators` validation queue. These validators should return
a promise. Rejection of a validation promise indicates a failed validation.
feat($rootScope): implement $applyAsync to support combining calls to $apply into a single digest.

It is now possible to queue up multiple expressions to be evaluated in a single digest using
$applyAsync. The asynchronous expressions will be evaluated either 1) the next time $apply or
$rootScope.$digest is called, or 2) after after the queue flushing scheduled for the next turn
occurs (roughly ~10ms depending on browser and application).
feat($http): implement mechanism for coalescing calls to $apply in $http

When multiple responses are received within a short window from each other, it can be wasteful to
perform full dirty-checking cycles for each individual response. In order to prevent this, it is
now possible to coalesce calls to $apply for responses which occur close together.

This behaviour is opt-in, and the default is disabled, in order to avoid breaking tests or
applications.

In order to activate coalesced apply in tests or in an application, simply perform the following
steps during configuration.

   angular.module('myFancyApp', []).
     config(function($httpProvider) {
       $httpProvider.useApplyAsync(true);
     });

OR:

   angular.mock.module(function($httpProvider) {
     $httpProvider.useApplyAsync(true);
   });

Closes #8736
Closes #7634
Closes #5297
docs(shallowCopy): add missing word 'are' and period.

Closes #8794
fix(Angular): remove duplicate nodeName_ references

I forgot to remove the variable declaration in previous nodeName_ commit.
chore(build): uprade closure-compiler to v20140814

no significant change in code size
docs(compile): `translcuded` -> `transcluded`

Oops.

Closes #8799