Custom uniform search optimization

- Switched ProgramState from unordered_map<string, Uniform> to unordered_map<GLint, Uniform> for faster uniform search. This will give opportunity to access uniforms in program state by their location that gives faster search speed than using strings.