Abstract platform rendering to "surfaces"

This will allow us to render more things than just the framebuffer.
17 files changed