Classes are types that specify an inheritance relationship and can
have associated structured data through properties.
| <class> | (<type>) | C | 
| class-name | (x|<class> => (t? <sym>)) | G | 
|  | returns class name or false otherwise. |  | 
| class-parents | (x|<class> => <seq>) | G | 
|  | direct superclasses. |  | 
| class-ancestors | (x|<class> => <seq>) | G | 
|  | class precedence list including this class.  See
  Appendix * for details. |  | 
| class-direct-props | (x|<class> => <seq>) | G | 
|  | properties defined directly on this class. |  | 
| class-props | (x|<class> => <seq>) | G | 
|  | properties defined on this class or any superclass. |  | 
| class-children | (x|<class> => <seq>) | G | 
|  | direct subclasses. |  | 
| DC | (DC ,name (,@parents)) | S | 
|  | defines a class named ,name with direct parents ,@parents |  | 
| new | (type|<class> prop-inits|...) | M | 
|  | creates an instance of type type and prop 
  initialized as specified by prop-inits.  
  For example, (new <point> point-x 1 point-y 2)
  creates a point with x=1 and y=2. |  | 
|  | 
Properties are named data associated with classes.  Their values are
accessed exclusively through generic functions, called getters and
setters.  Descriptions of properties are instances of <prop>.
Property values can either be specified at creation time with keyword
arguments, by calling a property setter, or through a property
initialization function called lazily the first time a getter is called if
the property is otherwise uninitialized.  Property initialization
functions are called with a single argument, the object under construction.
| <prop> | (<any>) | C | 
| prop-owner | (x|<prop> => <any>) | P | 
|  | class on which property was directly defined. |  | 
| prop-getter | (x|<prop> => <gen>) | P | 
|  | reader accessor generic. |  | 
| prop-setter | (x|<prop> => <gen>) | P | 
|  | writer accessor generic. |  | 
| prop-type | (x|<prop> => <type>) | P | 
|  | type constraining property value. |  | 
| prop-init | (x|<prop> => <fun>) | P | 
|  | lazy initialization function. |  | 
| find-getter | (c|<class> getter|<gen> => <met>) | G | 
|  | finds getter method defined on given class. |  | 
| find-setter | (c|<class> setter|<gen> => <met>) | G | 
|  | finds setter method defined on given class. |  | 
| prop-bound? | (x g|<gen> => <log>) | P | 
|  | returns true if property with getter g is bound in
  instance x. |  | 
| add-prop | (owner getter|<gen> setter|<gen> type|<type> init|<fun>) | M | 
|  | where init is a one parameter function that returns the initial
  value for the prop and gets called lazily with the new instance as
  the argument. |  | 
| DP | (DP ,name (,oname|,owner => ,type) [,@init]) | S | 
|  | add's a property to ,owner with getter named
       ,name, setter named ,name ## "-setter", 
       type ,type, and optionally initial 
  value ,init.  The initial value function is evaluated 
  lazily when prop's value is first requested. |  | 
|  |