fix(ngClass): ensure that ngClass only adds/removes the changed classes

ngClass works by removing all the former classes and then adding all the
new classes to the element during each watch change operation. This may
cause transition animations to never render. The ngClass directive will
now only add and remove the classes that change during each watch operation.

Closes #4960
Closes #4944
refactor($sce): Use $sniffer instead of $document for feature detection.

Also adds `$sniffer.msieDocumentMode` property.

Closes #4931
Closes #5045
fix(ngAnimate): use a fallback CSS property that doesn't break existing styles

The clip property seems to remove the box-shadow property when an absolute
positioned animation is ongoing. This fix changes the property to be border-spacing
which is also very underused. The border-spacing CSS property is only visible
when border-collapse is set to separate.

Closes #4902
Closes #5030
docs(guide/migration): fix typo ngHtmlBind -> ngBindHtml
feat(input): hold listener during text composition

When composing text in CJKV, intermediate buffer for unfinished text should not
be updating the bound scope variables.

Closes #4684
fix($resource): Always return a resource instance when calling class methods on resources.

Previously, calling `MyResource.save(myResourceInstance)`returned
a promise, in contrast to the docs for `$resource`. However,
calling `MyResource.save({name: 'Tobias"})`already correctly
returned a resource instance.

Fixes #4545.
Closes #5061.
fix(ngController): fix issue with ngInclude on the same element

This changes the priority of ngController to 500 so that it takes precedence
over ngInclude.

Closes #4431, #4521
docs(guide/ie): add info about what IE versions are supported

Added text from https://github.com/angular/angular.js/issues/4974

Closes #5070
docs(faq): update compressed and minified file size

Closes #5058
docs(guide/unit-testing): minor style and grammar changes

Closes #5057
chore: use temporary version of grunt-jasmine-node

This should be reverted once https://github.com/jasmine-contrib/grunt-jasmine-node/pull/33 gets merged in the upstream repo.

It fixes the problem where Grunt does not fail the build, even though there are failures.
See https://travis-ci.org/angular/angular.js/builds/14329011#L2366
test(docs): fix the failing specs

Because Grunt was not failing the build, we didn't noticed these failing specs.
fix($compile): ensure CSS classes are added and removed only when necessary

When $compile interpolates a CSS class attribute expression it will
do so by comparing the CSS class value already present on the element.
This may lead to unexpected results when dealing with ngClass values being
added and removed therefore it is best that both compile and ngClass delegate
addClass/removeClass operations to the same block of code.
fix($animate): ensure addClass/removeClass animations do not snap during reflow

Closes #4892
fix($animate): ensure transition animations are unblocked before the dom operation occurs

Transitions are blocked when the base CSS class is added at the start of the animation. This
causes an issue if the followup CSS class contains animatable-styles. Now, once the animation
active state is triggered (when the animation CSS dom operation occurs) the animation itself
will always trigger an animate without a quick jump.

Closes #5014
Closes #4265
fix($animate): ensure keyframe animations are blocked around the reflow

Keyframe animations trigger on the first CSS class and not the second.
This may cause a slight flicker during a stagger animation since the
animation has already started before the stagger delay is considered.
This fix ensures that the animation is blocked until the active animation
starts which allows for staggering animations to take over properly.

Closes #5018
chore($animate): remove unnecessary reflective dereferencing
fix(ngAnimate): correctly retain and restore existing styles during and after animation

Closes #4869
fix(tests): Correct tests for IE11

Some tests were wrong. However, src/* did not contain problems.

Fixes #5046
fix(ngInclude): Don't throw when the ngInclude element contains content with directives.

Related to #5069