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);
      }
@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]

*