code: function Traverse(steps, options)
  {
    // always create new instance
    if (!(this instanceof Traverse)) return new Traverse(steps, options);
  
    // make options optional :)
    options = options || {};
  
    // store the main thing
    this.steps = steps;
  
    // custom logger instance
    // expected bunyan-compatiable API
    this.logger = options.logger || logger;
  
    // custom entry point, otherwise empty string will be used
    this.entry = options.entry || '';
    // allow prefixed handles
    this.prefix = options.prefix || null;
  
    // if no middleware controller provided, just make it pass though untouched
    this.middleware = options.middleware || this.middlewarePassthru;
  
    // use custom emitter or built-in
    this.emitter = options.emitter || this.emit;
  }
docs: Traverse constructor
  
  @constructor
  @param {object} steps - list of steps to follow
  @param {object} [options] - custom options