Abstract graphics operations into Surface
so that Renderer can target different backends.