Renderer refactoring - Renderables

Note: This pull depends on #3283, so those commits will also appear here until it is merged.

This streamlines the creation and drawing of Renderables, dropping a lot of accumlated cruft and adding support for voxels and (eventually) isometric rendering.

Renderables have been changed from a struct holding additional Sprite state to an abstract class that describes "something that can draw itself", positioned using world coordinates.

This is a fundamental change to the rendering code, with a high chance of regressions. I've tested that the common cases display properly, but there may be edge cases.