Error controller to handle HTTP errors.

Fixes #257 and #310.
Why `public`? Would the dispatcher ever have need to modify or read these?