Adds new GLSL Shader Program Instance class and thus splits asset and rendering functionality.

From now on shader programs solely wrap the shader source code and the material parameters (which both get loaded via the asset pipeline). They provide an interface for creating shader program instances. Shader program instances on the other hand contain the support for shader permutation compilation and all the OpenGL specific code. Only shader program instances can be actively used for rendering tasks. Each shader program instance is created using a given shader program and the shader program itself is kept as a reference, so the actual source code can be shared between all shader program instances. All shader program instances get disposed if the base shader program gets disposed.