Drastially change how beforeRedirect callbacks work.

Instead of relying on removed event system features, the beforeRedirect
callback now works differently. Each callback will receive the original
URL that the redirect was for and the response object. Any listener can
directly set the location header, statusCode or any other headers they
desire. The exit parameter cannot be altered and will most likely be
removed in the future as exiting from the controller makes a variety of
testing situations harder. This change also simplifies the testing
& behavior of the beforeRedirect callback.

If a beforeRedirect callback is stopped no redirection occurs as in the
past.
Use Response::location() & fix failing test.

Use the new methods to detect/set location headers. Also fix a failing
test, by re-using existing fixture classes.
Fix errors, function signatures and fixtures.

Update class fixtures remove incorrect code in ExceptionRenderer. Also
update and expand documentation around controller callbacks.
Fix coding standards.

`use` should be in alphabetical order.