Replace Quadtree with TileGrid

Replace the Quadtree tile mapping data structure with a simpler one that
only supports uniformly sized tiles. Currently the TileGrid throws away
tiles unconditionally when they no longer intersect the viewport.