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

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?
Why does this parameter exist? It doesn't seem like this is considering BP handlers at all.