index.js
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;
  }
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;
  }
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