Massive code overhaul.

Basically it boils down to this: Each material is going to have to describe what variables it needs for its own rendering
including any additional rendering passes such as shadow maps. The onus has also been placed on the user to provide accurate
functions to get shader information out of GameObjects. We will likely add some wrapper constructors that obfuscate away certain
common functionalities such as a StaticObject, DynamicObject, and AnimatedObject.