Makes shader ctor private
Only allows universal shaders for now
Adds a shader manager to reuse identical shader programs