Refactor|Material: Reworked MaterialVariant into Material::Variant

Functionally this class remains unchanged except it is now defined
within the scope of de::Material to match the ownership model of
the variant abstraction.