Overhaul spatial caching

This splits the old SpatialBins trait into two, and only updates positions when they change (the old code used to recalculate everything each tick).

It cuts about 1ms from the start-game tick on Zeus (16ms -> 15ms), and removes some of the assumptions blocking isometric terrain.