Make router a ReactElement class

This commit takes a slightly different approach from our work on
this branch thus far. A "router" is now a ReactElement class instead
of its own constructor. This architecture makes it easier for a router
to share state with its instance and should eliminate the need for
the flipSwitch() hack by using componentWillReceiveProps to swap out
the state instead.

Also, I added back the navigation methods at the router class level
for other code that needs to use them.

This commit also removes a lot of the old dead code. Most of the
tests are still commented out, hence this is a wip.