Fixes and improvements for GL3

-Fixed cases when texture coordinates are provided, but no texture is
actually used. Like when calling d3d_model_block with texture == -1.
This is something that needs to be fixed DX as well I suppose, as this
was more of GL context fix than anything else.
-Uniform and Attribute locations are queried only after linking the
program and not every frame. This greatly increases speed.
-Divided the shaders to now we have a prefix for fragment and vertex
shaders. These prefixes will be added to all user shaders, so users have
access to built-in variables like transformation matrices, texture
coordinates and other things.
-The shader now has branches which checks if texturing is enabled, color
is enabled or if both is disabled, then render using bound color.
Branches are usually something to fear in shaders, but that is usually
the case when branching can change per fragment. As the branching
arguments are uniforms (so constant for every drawing), then this
doesn't happen and at least in newer hardware like the 660ti I have, it
doesn't reduce speed in any way. "Proper" way is to create several
shaders for this, but the basic default shaders we will provide might as
well be slower. It's up to the user to make them faster if needed.
-Removed more deprecated function calls like glColor4ubv. This reduces
per-frame deprecated functions to 0 in Minecraft example, but there are
some still in functions like d3d_begin(). I will remove them later.
-Fixed get_texture. It was returning -1 when the return type was
unsigned (so it was A BIG number). As that is then used in
glBindTexture, then it actually doesn't make sense to be -1 anyway (as
glBindTexture also takes unsigned type) and so binding to 0 is actually
to "unbind" a texture. In reality, by GL standard, it binds a (0,0,0,1)
(a black) 1x1 texture.