NewProgram now takes FragmentShader and VertexShader arguments