Coprocessors can register an `#on_error` handler.

This gets invoked (in the relevant `ExecutionContext`) whenever another handler raises an exception.  It receives the exception, as well as the event name and original arguments.  Any return values or raised exceptions become the final ones HBase sees.

Particularly, by wrapping incoming exceptions with a `java.io.IOException`, a coprocessor can decide to send an error back to the client rather than force HBase to unload the coprocessor..