Fix return code in ShellDispatcher.

If a shell returns false the exit code should be non-zero.
Remove Controller::appError()

This vestigal method from 1.x is no longer necessary. The current
exception/error handling tools are very flexible and this third way to
do things is confusing and not necessary.
Start extracting a base class for error handlers.

Use a template method pattern to make error handlers consistent, but
provide a way to customize the displayed output based on the
environment.
Start moving ConsoleErrorHandler to use new base class.

Update code and tests for ConsoleErrorHandler to work with new template
method and base class.
Extract base class for exception rendering.

Extract base class + template method for exception handling, implement
it in both the console and web error handlers.
Fix ConsoleErrorHandler not exiting properly.

Implement a _stop() method that allows console exceptions to exit with
a non 0 code to indicate failure.