fix dispatcher to catch legitimate exceptions

All service managers throw the same `ServiceNotFound` and `ServiceNotCreated` exceptions.

The dispatcher made no distinctions between:
* exceptions thrown in the event a controller can't be loaded; and
* exceptions thrown from initializers within `ControllerLoader`

The first case is a legitimate "controller-not-found" error and can be tested for using the `ServiceManager::has()` method whereas the second case needs to be caught and forwarded to a 500 status page.