fix fast clicking can break app

the "fetch data" promise is global and based on the current layout now. the idea is that all requests wait for the current layout's data to be fetched before they render.

the root cause of the bug was that request 2 may have finished before request 1. request 1 used to be the route that would initialize the layout. If request 2 finishes before request 1, request 1 would be cancelled before it could initialize the route.

this change ensures that the first route that actually completes will have all the layout data populated. then the responsibility of initializing the layout moves to the client renderer.