function $$AsyncCallbackProvider(){
  this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
    return $$rAF.supported
      ? function(fn) { return $$rAF(fn); }
      : function(fn) {
        return $timeout(fn, 0, false);
      };
  }];
}
@ngdoc method
@name $animate#setClass
@kind function
@description Adds and/or removes the given CSS classes to and from the element.
Once complete, the done() callback will be fired (if provided).
@param {DOMElement} element the element which will have its CSS classes changed
  removed from it
@param {string} add the CSS classes which will be added to the element
@param {string} remove the CSS class which will be removed from the element
@param {Function=} done the callback function (if provided) that will be fired after the
  CSS classes have been set on the element