Fleshed out ShaderProgram.

All resource loading *really* has to be moved out of ShaderProgram
and Texture.