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
working on that.