feat(*): adds error handling support

With this change all middleware handler are exected
to return `Result<Action, Error` instead of just
`Action`.

This means a handler either has to end with

Ok(Continue) -> continue handler invocation
Ok(Halt)     -> stop handler invocation
Err(err)     -> invoke error handler chain

Middleware should never handle errors implicitly
and instead just pass on errors to be handled
by a proper error handler. This comes with the
flexibility that error handler can be swaped out
in favor for custom error handler. This is useful
for custom 404 pages etc.

`ErrorHandler` are just like regular `Middleware`
with the only difference that they take an additional
`&NickelError` parameter. `ErrorHandler` can either
halt other `ErrorHandler` from running with
`Ok(Halt)`, let other error handler continue with
`Ok(Continue)` or shadow the original error with
`Err(err)`.

Fixes #48