gl::shader: Cache program and uniforms

+ Cache currently active program
+ Cache uniform locations