Restructure base classes

(work in progress but please take a look already)

This is the first step in the base class cleanup. We now have material as the abstract base class and mineral and composite derived from it.

next steps:
- remove composite_base
- remove named tuple
Is composite_base doing any useful work?  Can we safely get rid of it?