Avoid closures by allowing routes to be directly registered

Conceptually, this means routes are registered once, and not each time
dispatch() is called