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
see "next steps" at the top