Add a editable ShaderProgram database to VideoManager.

It works on the concept of set of flags. Each flag may be active or inactive, and for each combination of these states of every flag, there is an associated shader.
You can also replace the shader associated with a combination of flags, allowing for user-made shaders.
Merge branch 'shaderdatabase' into dev