code: function(fn, ms, args) {
      function execute () {
        // Set the delay first here, so that cancel
        // can be called within the executing function.
        setDelay(fn, ms, execute);
        fn.apply(fn, args);
      }
      setDelay(fn, ms, execute);
      return fn;
    }
docs: *
  @method every([ms] = 1, [arg1], [arg2], ...)
  @returns Function
  @short Executes the function every `ms` milliseconds.
  @extra Returns a reference to itself. `every` uses `setTimeout`, which
  means that you are guaranteed a period of idle time equal to [ms]
  after execution has finished. Compare this to `setInterval` which
  will try to run a function every [ms], even when execution itself
  takes up a portion of that time. In most cases avoiding `setInterval`
  is better as calls won't "back up" when the CPU is under strain,
  however this also means that calls are less likely to happen at
  exact intervals of [ms], so the use case here should be considered.
  Additionally, `every` can curry arguments passed in after [ms], and
  also be canceled with `cancel`.
  
  @example
  
  logHello.every(1000)        -> logs every second
  logArgs.every(1000, 'Hola') -> logs 'hola' every second
  
  @param {number} [ms]
  @param {any} [arg1]
  @param {any} [arg2]
  
  *