Differentiate active & target handlers

Previously, the router only had the notion of "currently active" handlers.
However, "activation" of handlers happens recursively, and at any time
they can redirect to a different route.

In that case, the "active handlers" array actually contained inaccurate
information, because handlers below the handler that caused the
redirect had not yet been activated.

This commit changes the internal bookkeeping to separately track
"where am I going?" and "how far along have I gone?", so that
sudden redirects in the middle can be smarter about which handlers
they need to activate.