more robust error handling

- co now returns a thunk. arguments are no longer accepted.
- a few error test cases have been added and fixed.
- the default callback now simply rethrows any errors.