whole_func_string: function(type, options, fn) {
      if (arguments.length === 1) {
        return this[type].iterator.fn;
      }
      if (typeof options === 'function') {
        fn = options;
        options = {};
      }
      this[type] = new LoaderType(options, fn.bind(this));
      this.setLoaderType(type);
      return this;
    }
func_code_string: function(type, options, fn) {
      if (arguments.length === 1) {
        return this[type].iterator.fn;
      }
      if (typeof options === 'function') {
        fn = options;
        options = {};
      }
      this[type] = new LoaderType(options, fn.bind(this));
      this.setLoaderType(type);
      return this;
    }
func_documentation_string: Register an iterator function of the given `type`. Types typically
  represent a kind of flow-control, like `sync`, `promise`, `stream`,
  `async` etc.
  
  ```js
  loader.iterator('sync', function(stack) {
  // `stack` is the loader stack (array) to iterate over
  // each item in array is a loader function
  return function(args) {
  // `args` is the arguments passed to the loaders
  }
  });
  ```
  @name .iterator
  @param  {String} `type`
  @param  {Object} `options`
  @param  {Function} `fn` The actual iterator function.
  @return {Object}
  @api public