Update gemvertexbuffer.cpp

Adds a dynamic std::vector object array for GLSL attribute variables.

NOTE - an error with a "reset_attributes" msg.  The console gives "GL: invalid enumerant".  I am unable to find where this occurs.

The vector array changes in size as new variables are added.  If a variable already exists as a VBO, the pd-msg updates the attribute with the pd-table provided.  If the vert/frag file is changed (the type of an attribute for example) the attribute array in gemvertexbuffer can be reset with a pd-msg and refilled.

Note that the end of the attribute() function resizes and re-copies the array of all attributes  Otherwise, the changes are not visible until the msgs are sent a 2nd time.

The aim in creating these extra VBOs is to give *each* geo-primitive in gemvertexbuffer the full potential of all permutations of the shader's parameters.  Up until now, the variables changed with pd-msgs affected *all* geo-primitives in the gemvertexbuffer the same.  This removes the need for multiple instances of glsl_program and gemvertexbuffer for small changes of a shader.
This method is almost perfect.  The only drawback is that the "uniform" parameter does not have it's equivalent to glVertexAttribPointer and cannot be set-up like the built-in and generic attributes (uniforms are once per primitive).  If a user wants to have each uniform variable different for each primitive, these uniform variables must changed to attributes in the vert/frag files.  This is a bit awkward since all variables intended to be used only for the frag file must be defined and then converted to "varying" in the vert file.  

The glsl_program still takes uniform pd-msgs, but this will affect *all* primitives.