big refactoring and simplification

dropped most of the metaclasses
added usage of descriptors