*
@package Function
@dependency core
@description Lazy, throttled, and memoized functions, delayed functions and handling of timers, argument currying.

*
function setDelay(fn, ms, after, scope, args) {
    var index;
    // Delay of infinity is never called of course...
    if(ms === Infinity) return;
    if(!fn.timers) fn.timers = [];
    if(!isNumber(ms)) ms = 0;
    fn.timers.push(setTimeout(function(){
      fn.timers.splice(index, 1);
      after.apply(scope, args || []);
    }, ms));
    index = fn.timers.length;
  }