Add UntexturedObjectsGLMultiDrawBuffer solution

Pass commands via bound GL_DRAW_INDIRECT_BUFFER instead of client
pointer in glMultiDrawElementsIndirect() argument.
Add TexturedQuadsGLTextureArrayUniform solution

TexturedQuadsGLTextureArrayUniform is the old
TexturedQuadsGLTextureArray, TexturedQuadsGLTextureArray now uses the
instance-based drawid instead of updating a uniform between every draw.
Add TexturedQuadsGLNoTexUniform solution

TexturedQuadsGLNoTexUniform is the old TexturedQuadsGLNoTex,
TexturedQuadsGLNoTex now uses the instance-based drawid instead of
updating a uniform between every draw.
Add TexturedQuadsGLNaiveUniform solution

TexturedQuadsGLNaiveUniform is the old TexturedQuadsGLNaive,
TexturedQuadsGLNaive now uses the instance-based drawid instead of
updating a uniform between every draw.
Add UntexturedObjectsGLDrawLoop solution
Add UntexturedObjectsGLMapUnsynchronized solution

Use a shader storage buffer to pass the transforms for all draw calls,
but update their contents one at a time before each draw call using an
unsynchronized map/memcpy/unmap.
Add UntexturedObjectsGLMapPersistent solution

Use a shader storage buffer to pass the transforms for all draw calls,
but update their contents one at a time before each draw call by
memcpy'ing into the persistent-mapped buffer with appropriate fencing.
Add a define to only draw first triangle of draw call

The Untextured-objects problem is not always cpu bound.  This commit
adds a DRAW_SINGLE_TRIANGLE define in untexturedobjects.cpp that reduces
the amount of gpu work by only drawing the first triangle of each draw
call.  The define is currently disabled.