*
@method fill(<arg1>, <arg2>, ...)
@returns Function
@short Returns a new version of the function which when called will have some of its arguments pre-emptively filled in, also known as "currying".
@extra Arguments passed to a "filled" function are generally appended to the curried arguments. However, if %undefined% is passed as any of the arguments to %fill%, it will be replaced, when the "filled" function is executed. This allows currying of arguments even when they occur toward the end of an argument list (the example demonstrates this much more clearly).
@example

var delayOneSecond = setTimeout.fill(undefined, 1000);
delayOneSecond(function() {
// Will be executed 1s later
});

*
function() {
      var fn = this, curried = multiArgs(arguments);
      return function() {
        var args = multiArgs(arguments);
        curried.forEach(function(arg, index) {
          if(arg != null || index >= args.length) args.splice(index, 0, arg);
        });
        return fn.apply(this, args);
      }
    }