Separate the shader-specific implementation into child classes of Shader.
Initialization, quit and constructor mappers are placed in separate static classes.
This allow to reduce the huge amount of preprocessor definitions, separate the generic, driver-specific and sampler-specific code and be able to easily add a new implementation.
Add a prototype for the GL_2D shader implementation too (WIP).
Merge branch virtual_shader into master