rewrite:
  * handle any amount of input arguments
  * allow multiple error handlers
  * only call error handlers after the error is nextd
  * make passing callback optional
  * rename end to run since it can happen multiple times