WIP: Fixuppin

Differences between core animate and ngAnimate:

In core, class API promise is resolved immediately if class API invoked outside of digest. In ngAnimate,
it will not be resolved until after the animation is completed. Animation is completed synchronously in
core.

When invoked during a digest, class DOM manipulations will be coalesced together in a fashion which
prevents jank in certain browsers (IE11 & friends). ngAnimate already did this.

BREAKING CHANGE:

Class operations performed by $animate will no longer occur immediately in all cases, so you may not
necessarily depend on a class being present immediately after $animate.addClass(), or a class being
removed immediately following $animate.removeClass().