Replace usage of QGLShaderProgram with custom ShaderProgram class

-ShaderProgram is implemented using portable code
-ShaderProgram supports Geometry, Tesselation Control, and Tesselation
Evaluation shaders
-ShaderProgram has similar style to QGLShaderProgram but does not
implement many of it's functions.