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?
Could we store this handler at ``d[e]`` to avoid traversing the MRO every time?