code: function(element, add, remove, options) {
          options = prepareAnimateOptions(options);
          options.addClass = mergeClasses(options.addClass, add);
          options.removeClass = mergeClasses(options.removeClass, remove);
          return $$animateQueue.push(element, 'setClass', options);
        }
docs: @ngdoc method
  @name $animate#setClass
  @kind function
  
  @description Performs both the addition and removal of a CSS classes on an element and (during the process)
  triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and
  `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has
  passed. Note that class-based animations are treated differently compared to structural animations
  (like enter, move and leave) since the CSS classes may be added/removed at different points
  depending if CSS or JavaScript animations are used.
  
  @param {DOMElement} element the element which the CSS classes will be applied to
  @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)
  @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)
  @param {object=} options an optional collection of options/styles that will be applied to the element
  
  @return {Promise} the animation callback promise