The basic idea is that the class or instance has to tell us what `__init__` arguments are required. Then any code that needs to create it can just use the kwds.

for the design
I didn't want to keep a reference to the full data in `_init_keys`. However, I will most likely write a method `get_init_keys` that returns the full dict. (essentially the part starting at line 2143)