fix($rootScope): broadcast $destroy event on $rootScope

Fixes #5169
fix($animate): ensure ms durations are properly rounded

Closes #5113
Closes #5162
fix(input): ensure ngModelWatch() triggers second digest pass when appropriate

Due to an earlier change, ngModelWatch() no longer returns a value to the
caller. This means the digest loop has no way to tell if the watch actually
modified anything and so can not schedule another pass.

This means any watches that watch form or model controller changes
(e.g. watches on form.$valid) that are scheduled prior to an ngModelWatch()
will not be able to see any changes made therin.

This commit fixes this behavior by returning the latest evaluated ng-model
value.

Closes #5258
Closes #5282
chore(travis): move checks from before_scripts to scripts

If jshint (or any other ci-check) fails, Travis marks the build as "Errored" which I don't think is desider:
https://travis-ci.org/angular/angular.js/builds/14938896
fix(ngInit): evaluate ngInit before ngInclude

The priority of ngInit is adjusted to occur before ngInclude, and after
ngController. This enables ngInit to initiallize values in a controller's
scope, and also to initiallize values before ngInclude executes.

Closes #5167
Closes #5208
fix($animate): ensure animations work with directives that share a transclusion

Closes #4716
Closes #4871
Closes #5021
Closes #5278
docs(TRIAGING): Initial doc about triaging issues in Angular
docs(tutorial/step-2): remember to install karma plugins
docs(tutorial/step-3): remember to install karma plugins
docs(tutorial/step-6): remove unused `class="diagram"`

Closes #5197
chore(Scope): short-circuit after dirty-checking last dirty watcher

Stop dirty-checking during $digest after the last dirty watcher has been re-checked.

This prevents unneeded re-checking of the remaining watchers (They were already
checked in the previous iteration), bringing a substantial performance improvement
to the average case run time of $digest.

Closes #5272
Closes #5287
chore($resource): Use shallow copy instead of angular.copy

Replace calls to angular.copy with calls to a new function, shallowClearAndCopy.
Add calls to copy for cache access in $http in order to prevent modification of cached data.
Results in a measurable improvement to the startup time of complex apps within Google.

Closes #5300
chore(Angular.js): Use call and === instead of apply and == in type check functions

Updates isDate et al to use call instead of apply and === instead of ==.
The change to call brings minor performance improvement and === is just
better practice than ==.
http://jsperf.com/call-vs-apply-tostring

Closes #5295
fix(isElement): return boolean value rather than `truthy` value.

angular.isElement currently returns a truthy object/function, or false. This
patch aims to correct this behaviour by casting the result of the isElement
expression to a boolean value via double-negation.

Closes #4519
Closes #4534
fix($compile): update cloned elements if the template arrives after the cloning

If an element has a directive whose content is loaded using `templateUrl`,
and the element is cloned using a linking function before the template arrives,
the clone needs to be updated as well.

This also updates `ngIf` and `ngRepeat` to keep the connection to the clone
of a tranclude function, so that they know about the changes a directive with
`templateUrl` does to the element in the future.

Fixes to #4930.
docs(CHANGELOG): add v1.2.4 changes
chore(release): cut 1.2.4 wormhole-blaster release
revert: chore($resource): Use shallow copy instead of angular.copy
revert: chore(Angular.js): Use call and === instead of apply and == in type check functions
chore(CHANGELOG): remove reverted commits from 1.2.4