Honour custom __init__ methods. Refs #6 and #7.

The old arcitecture was wrong as fiddling with bases meant that we either got an infinite recursion, or lost customizations done in
__init__. The new way where we don't create a new Subclass, but only reset __init__ is much cleaner.