Add vertex attribute specification restrictions

This eliminates undefined behavior from specifying vertex attributes.
I don't think this restriction can work. This change assumes the validation is done against the base type of the currently bound program's attribute, but the program can be changed and the previous call to glVertexAttribPointer still applies. The vertex attribute pointer is part of the vertex array object's state, not the program's.

I think the only restriction that could be made would be to validate the state of the currently bound (or default) VAO against the enabled, active vertex attributes of the currently bound program at draw call time. If the function called to set up the vertex attribute pointer (vertexAttribPointer, vertexAttribIPointer) differs from the base type of the attribute that that pointer will be fed into, then generate INVALID_OPERATION rather than allowing the draw call to go through. What do you think?