Modified Shader Group to work with multiple shaders

Shader group can now "handle" multiple ShaderGroups in the scene graph.
That is, a ShaderGroup can be a child of another shader group and it
functions in such a way that when it binds a shader, the previous shader
gets saved and rebound when the current shader unbinds.