Refactor route.render for increased sanity

The code for `route.render` has sprawled pretty bad. This refactors it to get back in line.

Biggest change besides the restructuring is that views use `lookupFactory` instead of `lookup`, allowing them to be created with initial values (and be consistent with how views are instantiated elsewhere).