Refactored the Shader and Program classes to provide better functionality to clients