Created interface for OpenGL shaders

Shaders allow the render pipeline to be controlled.  This allows for
complex calculations to be performed on the GPU rather than the CPU.
This interface allows shaders to be loaded into a specific stage,
shader source to be loaded into OpenGL, and for the shader source to be
compiled.