code: function createFunction(name, args, fn) {
      if (isFunction(args)) {
          fn = args;
          args = [];
      }
  
      return new Function('body',
          'return function ' + name + '(' + args.join(', ') + ') { return body.apply(this, arguments); };'
      )(fn);
  }
docs: Creates a named function with the desired signature
  
  @param  {string} name - function name
  @param  {Array} [args] - array of argument names
  @param  {Function} fn - function that contains the logic that should run
  
  @return {Function} a named function that takes the desired arguments
  
  @private