code: function debounce (fn, timespan) {
      var timeoutID;
  
      return function () {
          var args = arguments;
          var debounced = function () {
              timeoutID = null;
              fn.apply(this, args);
          }.bind(this);
  
          clearTimeout(timeoutID);
          timeoutID = setTimeout(debounced, timespan);
      };
  }
docs: Returns a function that will execute the given function only if it stops being called for the
  specified timespan.<br/>
  See also {@link module:lamb.throttle|throttle} for a different behaviour where the first call
  happens immediately.
  @example <caption>A common use case of <code>debounce</code> in a browser environment:</caption>
  var updateLayout = function () {
  // some heavy DOM operations here
  };
  
  window.addEventListener("resize", _.debounce(updateLayout, 200), false);
  
  // The resize event is fired repeteadly until the user stops resizing the
  // window, while the `updateLayout` function is called only once: 200 ms
  // after he stopped.
  
  @memberof module:lamb
  @category Function
  @see {@link module:lamb.throttle|throttle}
  @since 0.1.0
  @param {Function} fn
  @param {Number} timespan - Expressed in milliseconds
  @returns {Function}