Use Return::MultiLevel so forward & redirect can immediately return from current hook/route code.

Implements the "specification" for `forward` from #432; calling forward ceases execution of the current dispatch and returns the response from dispatching a modified request. 

`redirect` uses the same mechanism to immediately return from hook/route code to avoid halting the response, resolving #432.

Adds tests for `after` hook being called (once and once only) from a route, forward and redirect.

@ambs - apologies again for the largish pull request!