ModelBatch: keep track of obtained renderables and other changes

Only free renderables actually obtained. This doesn't forces the RenderableProvider to always obtain renderables from the pool anymore. E.g. this way a particle emitter can be a RenderableProvider while using its own internal renderable(s). Also only set the shader and/or environment if specified (thus depending on the method signature), by default this is the same behavior (they are set to null on obtain), but it allows the RenderableProvider to specify its own Shader or Environment.

DefaultShader: use Config instead of static variables for e.g. defaultCullFace.