Consider not running a primitive's constructor during load time

Currently we create an instance of the primitive during metadata generation for the primitive to figure out which instance fields a primitive has. This means that if a primitive does any heave initialization in the __init__ loading of this and all primitives will take much longer, and can also even use memory.

Because this is a common pattern (to initialize stuff in the constructor) and the benefits of generating metadata for instance fields is pretty low, we should maybe consider simply not doing this, maybe even not having instance fields as part of metadata at all, or maybe not generate it automatically but allow people to set it themselves if they do want do document some fields publicly. In any way we allow only standard fields so this is just validation.

Making initialization as part of the constructor would allow us to measure better how long it takes to initialize vs. fit. Because current suggestion is to lazy load stuff the first time fit is called, which then makes measurements trickier.