signal errors for bad initialization of slot definitions
In order to get slot definition initialization right, move the
readers/writers slots to direct slot definitions, and write code to
detect all the bad cases documented in the MOP dictionary at
initialization time. Condition slots also need changing, to have
separate initform and initfunction information. Moving the slots
breaks metacircle resolution, naturally, so rewrite that to find the
relevant reader/writer information from the direct slots at runtime.
The irony of having to rewrite metacircle detection and resolution for
a bug tagged "easy" on launchpad is not lost on me.
Originally reported by Bruno Haible at some point in prehistory,
probably around December 2004, lp#309072.