Reimplemented primitives with Racket.
Added a pretty-printing protocol with base implementation.
Implemented generic object printing.
Merge branch 'primitive-printing' into generic-function-improvements
Refactored slot accessors.
Tried to resolve more vicious circularities.

This allows to add non-<method> methods to some of the predefined generic
functions. However, some functions still cannot be extended; e.g., one
cannot add even a <method> to `slot-ref-in-class` without causing a loop
when some MOP generic has a non-<method> method.

This happens because in this case to call `slot-ref-in-class` one needs
to access slots of non-predefined classes, which is handled by `slot-ref-
in-class`!

I believe this is caused by an incorrect generic bootstrapping mechanism;
duplicating the code for predefined generics seems so lame.