Add IMateriaSource interface and an implementation
I'm a little torn whether to provide the assignment operator.
The AMateria has const member which forbids any meaningful assignment,
the MateriaSource however does not have any such limitation.
I think the MateriaSource would not by able to be changed "in-game" and
making assignment not possible conveys this idea.
But the assignment could be useful for object reuse...
I left the assignment operator private, but provided implementation to
not make future laziness stand in the way of change.