Early draft

I'm not suggesting that we merge any of this but a PR makes it easier to discuss.
You could try traits, if you want to mix and match inheritances.