Initial implementation of uniform state management.

Used to abstract the details of glUniform management. This will allow us
to treat shaders a bit more flexibly.