change under() to be more like Mojolicious

In Mojolicious, under() returns a Router and allows a single callback
that decides whether to continue with that child router.

This combines the functionality of our under() and child().

In order to get good error messages, allow exceptions to be thrown with
information about the error.
move placeholder tests to the other route tests

The original integration tests are unweildy and are causing duplicate
tests to be written.
handle exceptions from routing

Instead of returning Freyr::Error, now we throw them instead.

Also clean up the main bot integration tests to focus them on testing
only the relevant stuff.
update plugins for new under() API