Implement the new GPUProgram class to replace ShaderProgram. Add tests.