Started making certain objects opaque so they can be extended in
a binary compatible way. Also split software_renderer to different
files.