code: function(callback, delay, repeat, callbackOff) {
          this._delays.push({
              accumulator: 0,
              callback: callback,
              callbackOff: callbackOff,
              delay: delay,
              repeat: (repeat < 0 ? Infinity : repeat) || 0
          });
          return this;
      }
docs: @
  #.delay
  @comp Delay
  @kind Method
  @sign public this.delay(Function callback, Number delay[, Number repeat[, Function callbackOff]])
  @param callback - Method to execute after given amount of milliseconds. If reference of a
  method is passed, there's possibility to cancel the delay.
  @param delay - Amount of milliseconds to execute the method.
  @param repeat - (optional) How often to repeat the delayed function. A value of 0 triggers the delayed
  function exactly once. A value n > 0 triggers the delayed function exactly n+1 times. A
  value of -1 triggers the delayed function indefinitely. Defaults to one execution.
  @param callbackOff - (optional) Method to execute after delay ends(after all iterations are executed).
  If repeat value equals -1, callbackOff will never be triggered.
  
  The delay method will execute a function after a given amount of time in milliseconds.
  
  It is not a wrapper for `setTimeout`.
  
  If Crafty is paused, the delay is interrupted with the pause and then resume when unpaused
  
  If the entity is destroyed, the delay is also destroyed and will not have effect.
  
  @example
  
  The simplest delay
  ~~~
  Crafty.log("start");
  Crafty.e("Delay").delay(function() {
  Crafty.log("100ms later");
  }, 100, 0);
  ~~~
  
  Delay with callbackOff to be executed after all delay iterations
  ~~~
  Crafty.log("start");
  Crafty.e("Delay").delay(function() {
  Crafty.log("100ms later");
  }, 100, 3, function() {
  Crafty.log("delay finished");
  });
  ~~~