Refactored Program
Improvements to ShaderSource
Move compilation to a separate method in Shader