Port to CCL

CCL is rather strict about type annotations, e.g., about initargs that
don't conform exactly to the specified type.  This happens most
frequently when slots are initialized to NIL but NIL is not a member
of the specified type, or when an integer is used to initialize a slot
with floating-point type.  Common solutions for these problems are:

* Use a more permissive type declaration (usually (or null
  <previous-type>).
* Declare the initarg as required (using the REQUIRED-INITARG
  function from the UTILS package).
* Provide an initform of the correct type instead of NIL.

Which one is correct depends on the individual class; sometimes NIL is
used as a marker that denotes the absence of a useful value, at other
times the code supposes that the slot is properly initialized before
instances are used.  While I've tried to fix the type annotations and
initializations throughout the code, there are surely places where
I've overlooked something or chosen the wrong resolution.  Therefore
this commit is likely to be more buggy than the previous ones until we
have a test suite that covers more code paths.  Sorry about that.