Shader/Program architecture.

Modifed program/shader architecture to be more flexible.