Refactored ShaderProgram

* Added superclass for shader programs called 'BaseShaderProgram' and pulled up some functions from 'ShaderProgram'.
* Changed name on 'ShaderProgram' to 'PhongShaderProgram'