gl: add vertexAttribPointer utility function

Handles the boilerplate nicely.
gl: minimize buffer object usage

Consolidate all buffers for shaders into a single buffer object. This
allows the GPU to pipeline the data much better, but requires some
actual values to be passed to glVertexAttribPointer (which is done using
vertexAttribPointer now).