Allow replacing PrettyExceptions middleware with your own exception handler.

This commit is an attempt to fix issue #472.
- Introduces a new config option,  'exception.handler'. The value should be
  a FQCN. If set it will replace the Slim\Middleware\PrettyExceptions
  middleware that is added to the stack by Slim\Slim in run().
- Adds a new method to Slim\Slim, remove() that allows you to remove
  middleware by passing a class name. As a safeguard you can not remove
  Slim\Middleware or Slim\Slim.
- Makes generateTemplateMarkup public so PrettyExceptions can call it,
  DRYing up the code a bit.
- Tests are included.