Introduced RenderGroups

Separated objects from their meshes, and introduced the concept of
RenderGroups which combine multiple meshes into a single buffer object.
This means meshes won't be duplicated, and all object sharing a common
program can also share a common vertex array object and hence reduce
context-switching.