Concurrent class-based animations, Promises API for Animations & Fixes to Staggering Animations

## Grouped Class-Based Animations 

Now something like this works fine:
```js
//feel free to call addClass, removeClass and set Class
//as much as you want within your directive code.
$animate.addClass(element, 'one');
$animate.addClass(element, 'two three');
$animate.removeClass(element, 'three');
$animate.setClass(element, 'five', 'one four');

//one animation is run that combines everything together
$rootScope.$digest(); 

//Now the following animations are run at the same time
// -> addClass : 'two five'
// -> removeClass : 'four'
```


## Promise Callbacks for Animations
The `doneCallback` function parameter is no more. Use a promise instead.
```js
//before
$animate.addClass(element, 'blue', doneCallback);

//after
$animate.addClass(element, 'blue').then(doneCallback);
```

## $timeout-based Stagger Animations
This fix uses $timeout behind the scenes instead of `animation-delay` animation `transition-delay`. It also adds another CSS class called `ng-EVENT-pending`. This new setup allows for 3rd-party CSS keyframe animations to work with Angular-defined stagger styles nicely.

https://s3.amazonaws.com/angularjs-dev/class-based-fixes/animate.html

## Closes
Closes #7228
Closes #7547
Closes #8297
Closes #8547