constructor(chain, args, cb, cbCtx) {
    this.chain = chain;
    this.cb = cb;
    this.cbCtx = cbCtx;
    this.index = 0;

    // since we always add a callback, and since after the 1st chain function
    // there is always at least 1 arg which is the 1st function result (it
    // can be undefined), then we need to force at least 1 argument to make
    // sure that all pipe methods receive the same payload
    this.args = args.length ? args : [null];
  }
@param  {Array}    chain  - list of functions to call
@param  {Array}    args   - function arguments
@param  {Function} cb     - end of waterfall callback
@param  {Object}   cbCtx  - functions context