be stricter about assignment of materials to slots when the object defines a single slot.

we now require that slot names used in material assignments always match exactly slot names declared by objects (except when objects don't declare any slot, in which case any slot name will do in material assignments).

before this commit, when an object defined a single slot, material assignments could use any slot names.

added a migration step to maintain backward compatibility.