Use texture layers for render target allocations, remove render phases.
Instead of splitting the scene into multiple phases, use texture layers to allocate slices as needed for each pass of the render frame. These are pooled and only allocated when the frame render target configuration changes. Previously, the code asserted if it was unable to fit the render tasks into a single render target for a single tile. Now, this (pathological) case is handled correctly. This makes the upcoming dynamic primitive cache support a lot simpler to add. It also means that we don't use a ping-pong allocation style, which typically performs badly on mobile / tiled rendering architectures.