Adds a shader uniform caching optimization.

This comes at a cost of completely breaking the matrix overload for
`zEffect::SetParameter()`, because now
`zShaderSet::GetUniformLocation()` isn't a constant, but it was intended
that the matrix overload be considered constant, even though it modifies
OpenGL state. The other overloads weren't supposed to be.

Possible fix:
* Specials methods for setting projection and model-view matrices.