Set layout before each recomputed action

This PR resets the layout before running each action, ensuring that any layouts used for redirects in `onBeforeAction` hooks, etc. are not used in the default action.

One quirk of this code is that the `_defaultLayout` has to be set if there is no layout set on the route; otherwise arbitrary layouts from other routes may be rendered. There could be a cleaner way to do this - I'm not sure how to add a test for it.