Preliminary support for Geometry Shaders

There's a lot of duplicate code because of this - until I can think of a
good way to consolidate it, it'll remain duplicated.