Refactor|Materials: Decentralized material preparation

Preparing a material variant for render is now done via the prepare()
methods of Material and Material::Variant (or, the Materials::cache()
mechanism). The method to call depends on whether the context variant
specialization is already known and/or whether the automatic variant
selection logic is appropriate (see Material::chooseVariant).