We can still refactor later, all this does it to add one private attribute that we need to have no matter what, even if we start to use `__new__` (Either we write a generic `__new__` or have to add it to most classes, and then it still won't work if a subclass adds a new keyword argument.)
adding `_make_init` to base.Model is what I meant with a `get_init_keys` method. `get_init_kwds` or something like that.

This PR, so far, only makes the minimum changes to get a generic solution for 2 bugs.