Implement wrappers to most OpenGL 2.0 interfaces.

  Missing interfaces are simple queries of compiled data contents, that
could require knowledge of the shader source to know the output vector
length.
  This change also changed some functions that accepted stride and
index arguments to no longer by byte based but base vector scale based.
This means that one cannot use structures to add data, what is expected
because the language does not support packed class objects.
  Another change was to allow a proper index on VBOs as it now checks
if it is a vector, and if not a vector must be null or an integer
(dynamically typed object) for the index/offset.

  The code still does not fully check bounds of arguments to glArrayElement
and other functions that could access out of bounds data (this is still a
TODO to implement proper queries and/or keeping track of states).