(feat) Added real error handling through a new Error variant

Error handling is a thing now, and Unwind now distinctly means
"I have handled this request correctly", whereas Error now means
"There is a problem. Abort mission.".

Middleware which want an exit-style function to fire no matter what
should ensure that they implement both exit and on_error.

Fixes #106 
Why do we return the `status` from `chain_enter` instead of `error` or `exit`? Seems ambiguous - should we reconsider it, or can you justify it?