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)
Yeah that made me jealous haha. No such luck for poor old statically compiled languages (or at least nothing faster than typing these up)