ShaderProgram class is complete (I think)

I don't think there any bugs but who knows!