Implemented abstract classes.
Corrected treatment of mixins in generic specializers.
Augmented generics with default method class + subclassing checks.
Added 'allocation' slot, implemented its inheritance and restrictions.
Modified MOP for direct slot accessor creation.

Replaced `finalize-slot-descriptors!` with `install-direct-accessors!`.
This will help to write a clean implementation for 'each-subclass' and
'class' slot allocation types as there will be no stupid calls to list-
index for each single slot, also MOP will be able to properly inherit
direct accessors.
Implemented 'each-subclass' slot allocation.

Added a new MOP function: `initialize-with-initargs-in-class!`. This is
necessary as `compute-effective-slot` can customize the class of class'
effective slots. Therefore, `initialize` should not be tied tightly to
<effective-slots> and their peculiar allocation types and initialization.

Also memory allocation for class-wide slots is pretty neat (or cheaty).
Implemented 'class' slot allocation.

This one is sort of tricky. Memory for these slots should be allocated
only once per whole lineage of classes. I wanted to carry on with that
'closed vector' approach, so we have two cases: direct class-slots and
inherited class-slots. The first ones should get their fresh new chunk
of memory, and accessors of the second group should be copied from one
of the superclasses: in this way they retain access to the data vector
with shared slot values.

Also the slot groups are removed from `install-direct-accessors!` args.
They aren't helpful because they are just <slots>, not <effective-slots>.
Instead I sweep though the inheritance tree directly to get what I need.

The code is in kinda messy state right now, should be cleaned up after
the virtual slots are ready.
Implemented 'virtual' slot allocation.

Virtual slots are effectively 'undercover' generic accessor functions.
In CLOS or Dylan _all_ slot accessors are generic functions--by the virtue
of them being second-class entities, bound by arbitrary symbolic names.
Making all generics second-class is unacceptable in Scheme, but it's okay
to do so only for the virtual slot accessors (as slots are already second-
class entities).
Slot allocation refactoring. Renamed 'class' --> 'class-lineage'.

Separated (os boot protocols inheritance) into several files and did some
refactoring: better comments, better readability, better function names...
Merge branch 'abstract-classes'
Merge branch 'generic-method-class'
Merge branch 'slot-allocation'

Conflicts:
	os/boot/protocols/initialization.sls
	os/introspection.sls