function (nextTargetFn, fnOpt) {
      tail.next = {
        fns: [nextTargetFn],
        opts: [fnOpt]
      };
      tail = tail.next;
      dispatch();
      return controller;
    }
function (nextTargetFn, fnOpt) {
      tail.next = {
        fns: [nextTargetFn],
        opts: [fnOpt]
      };
      tail = tail.next;
      dispatch();
      return controller;
    }
function ( nextTargetFn , fnOpt ) { tail . next = { fns : [ nextTargetFn ] , opts : [ fnOpt ] } ; tail = tail . next ; dispatch ( ) ; return controller ; }
set the next fn, allowing the tail to advance
set the next fn allowing the tail to advance