Cache GetUniformLocation on a per shader basis

Use ShaderProgram (was ShaderProgramInfo) more instead of just passing the int around.

Tested (on a very simple app) on WindowsGL and IOS.

Should still compile for PSM, we'll see what the build bot has to say.

Fixes #2218