Error controller to handle HTTP errors.

Fixes #310 and #257.

In this pull request:
* I defined a new `ErrorRedirectException` that  can be used instead of `RedirectException` to change the controller withoud reloading the page with an HTTP redirect. 

* I changed the `HTTPErrorException` to extend the new `ErrorRedirextException`. When thrown it changes the controller to the new `HTTPErrorController` as @VitSalis suggested in #257.

* I refactored the `ControllerBase`.
No, this is fine, I was confused.