Optimize

Major changes:
- Drawing made recursive to make recursive caching easy
- New redraw() api that only gets called on manual invalidation (MUCH faster)
- Tiles are no longer drawn (looks nicer and gives me +5 fps or so)