Propagate errors and log

- Errors occuring halfway through executing chains with no handling
  are passed up through to target and batch level to be returned in the
  final callback
- Error events are emitted at all levels to give visibility to loggers