*
@method debounce(<ms>)
@returns Function
@short Creates a "debounced" function that postpones its execution until after <ms> milliseconds have passed.
@extra This method is useful to execute a function after things have "settled down". A good example of this is when a user tabs quickly through form fields, execution of a heavy operation should happen after a few milliseconds when they have "settled" on a field.
@example

var fn = (function(arg1) {
// called once 50ms later
}).debounce(50); fn() fn() fn();

*
function(ms) {
      var fn = this;
      function debounced() {
        debounced.cancel();
        setDelay(debounced, ms, fn, this, arguments);
      };
      return debounced;
    }