Shader uniforms

Adds functionality for setting shader uniforms by name and fixes some previous flaws in ShaderProgram; Further possible work:
 - Add convenience methods for setting uniforms from GLM vector and matrix types (possible now, but slightly verbose)
 - Store uniform values in ShaderProgram and make glUniform calls only when value is changed (an optimization that seems premature at this point)
 - Uniform arrays? (They seem to be very rarely used)