feat($animate): use promises instead of callbacks for animations

The $animate service (both the service inside of ng and ngAnimate) now
makes use of promises instead of callback functions.

BREAKING CHANGE

Any existing directive code that makes use of animation callbacks provided
directly into any of the methods available $animate must now be converted to
use promises instead. Also, the `cancel` function (which was the return value
from each of the $animate methods) is now returned as a member function on the
returned animation promise.

```js
//before
var cancelFn = $animate.enter(element, container, null, callbackFn);
cancelFn(); //cancels the animation

//after (without cancel)
var promise = $animate.enter(element, container).then(callbackFn);

//after (with cancellation method)
var promise = $animate.enter(element, container);
promise.then(callbackFn);
promise.cancel(); //cancels the animation
```