Setup for dynamic shadows; add Shader subclasses

When using a shader that differs significantly from the normal
Phong/texture functionality, create a new class based on SubShader and
implement functions as needed, so that in our DrawObjects we can just
deal with "Shaders" without running around trying to cast things.