fix(ngdocs): `shortDescription()` should not error if no `description`
fix(ngdocs): create mock Doc objects correctly
chore(grunt): add test:docsgen to ci checks
chore(ngAnimate): ensure elapsedTime values are in seconds and millseconds
chore($sniffer): make msie variable public

The msie variable is a global variable used within the ng core which contains the
version number for the current Internet Explorer browser that is rendering the
application. Other modules outside of the ng core could make use of this variable
instead of having to rollout duplicate detection code. This code makes it easy to
reuse this simple property within the $sniffer service.
fix($animate): ensure the active class is not applied if cancelled during reflow

Closes #4699
fix($animate): ensure staggering animations understand multiple delay values
fix($animate): avoid hanging animations if the active CSS transition class is missing

Closes #4732
Closes #4490
chore(animateSpec): provide meaningful CSS class names in animation tests
feat($animate): ensure CSS transitions can work with inherited CSS class definitions

BREAKING CHANGE

ngAnimate addClass / removeClass animations are now applied right away. This means
that as soon as the animation starts the class will be added (addClass) or removed
(removeClass) to the element being animated instead of after the -add-active /
-remove-active animations are completed. This allows for animations outside of
ngAnimate to not conflict with $animate.

This commit introduces beforeAddClass and beforeRemoveClass animation event functions and
executes any addClass and removeClass event functions AFTER the class has been added or
removed (this is opposite functionality of how ngAnimate used to work when performing
JS-enabled animations addClass / removeClass animations). If your animation code relies on
any animations being performed prior to the class change then simply use the new
beforeAddClass and beforeRemoveClass animation event functions.

Finally, when animating show and hide animations using CSS transitions or keyframe animations,
ng-hide-remove doesn't require `display:block!important` for ng-hide-add anymore.
chore(docs): update $animate and ngAnimate docs
chore(docs): refactor/improve new CSS transition code in examples
fix($animate): only apply the fallback property if any transition animations are detected
fix(ngInclude): only run anchorScroll after animation is done

We need to wait until animations have added the content to the document before
trying to `autoscroll` to anchors that may have been inserted.

Fixes #4723
fix(ngMock): throw more descriptive errors for $animate.flushNext()
fix(ngView): only run anchorScroll after animation is done
docs(guide/providers): add providers documentation