Rework halt to use with_return from Return::MultiLevel.

Move the `halt` mechanism in to the Context to the with_return handler can be applied to immediately stop processing a hook/route handler when `halt` is used.

Adds tests for using halt in a before hook and within a route handler. Should resolve the concerns of #472.