Added Uniform Location Caching

Shader programs will now cache uniform locations so they don't have to
look them up each time you set one.