code: function Animation(animation, sub, animationContext) {
      var self = this;
      self.sub = sub;
      self.ctx = animationContext;
      self.transitionEnd = _whichTransitionEndEvent();
      self.animatingClass = " " + self.sub.settings.namespace + "-animating";
      if (animation === "remove") {
        self.steps = [
          function() {self._fadeOut();},
          function() {self._setWidth();},
          function() {self._removeElement();}
        ];
      } else if (animation === "sub") {
        self.steps = [
          function() {self._reIndex();},
          function() {self._fadeOut();},
          function() {self._setWidth();},
          function() {self._setTextAndFadeIn();},
          function() {self._cleanUp();}];
      } else if (animation === "insert") {
        self.steps = [
          function() {self._setWidth();},
          function() {self._setTextAndFadeIn();},
          function() {self._cleanUp();}];
      } else if (animation === "keep") {
        self.steps = [
          function() {self._reIndex();}
        ];
      } else {
        console.error("Unknown animation: ", animation);
      }
      self.steps[0](); // dequeue an run the first task.
    }
docs: *************************************************************************
  *
  Animation()                               *
  *
  ************************************************************************* 
  A privately used class for creating animations.  It allows for animations
  to have state associated with them, without passing arguments to callback
  functions.
  
  @param {string} animation - one of "remove", "sub", "insert", or
  "keep".  Indicates the animation to perform,
  and forcasts the contents of animationContext.
  @param {Object} sub - the instance of the Sub class associated
  with this animation.
  @param {Object} animationContext - any context that is needed by the
  passed animation.