Refactored MaterialComponent interface, so that it's now responsible to reset the shader's state being set by the current component; optimally, this shouldn't be needed since the engine should be able to generate a new, optimized (those if-evaluations do cost *some* time) shader for every new combination of components based on a supershader, but this is going to (maybe) happen a long way down the road