Fixed and intuitivized exception handling

abandoning pull request #1281 for this.

the rationale for this is to

1. fix some logic flaws
2. make errorhandlers more intuitive by making them rely on exception hierarchy instead of registration order
3. Enable 500 handlers on blueprint level

and all this while without breaking compatibility in not-already-broken usecases (which rely on the logic flaws i fixed)

TODO:

1. bake this into some tests as well
2. one error says

    > It is currently not possible to register a 500 internal server error on a per-blueprint level.

    why is this?
true, especially since we need to use `_find_error_handler` everywhere anyway because a blueprint might have no registered errorhandlers.

so either we create a ErrorHandlerDict for every blueprint (and remove `_find_error_handler`), or we make `_find_error_handler` do everything and remove ErrorHandlerDict.