3.0 simplify errorhandling

Simplify the error/exception handling in 3.0. Instead of all static methods the error handlers are now all instance methods and there are fewer configuration options overall. I didn't think the handling classes needed to be 'configurable' as they are application logic that should be part of the application code. However logging, and error levels are still configuration data as before.

The changes around error handlers have allowed duplicated code and out of place code to be removed from both `Configure` and `ShellDispatcher` which I see as a win.

There is a small bit of duplication between `ErrorHandler` and `ConsoleErrorHandler`, if it really bothers anyone I'm happy to extract it out into a base class.