Replace attachable functions with mixins.

Also remove slots. Because fuck them, seriously.
Call __init__ methods in a cooperable way (except for exposed classes which take fixed list of arguments)
Make holder classes and stat tracker fully cooperable
Revert "Make holder classes and stat tracker fully cooperable"

This reverts commit d2eaef0cd3b37bb271032f53a8da23a6252e6b4b.
Make separate volatile mixins for regular and cooperable classes
Pass keyword args through cooperable mixin
Split charge handling from module into separate mixin
Do not set charge attribute before until everything else is initialized
Make holder types cooperable
Rename volatile mixin which supports super() to match the name in official documentation
Clarify in docstrings that class is cooperatively designed.
Fix tests
Do not break limit of 120 characters