Refactor record layout following a suggestion from Taylor.
New layout is identical for records that don't have a parent type. For those
that do have a parent type, the layout is like this:
root-marker
root-fields
sub1-marker
sub1-fields
sub2-marker
sub2-fields
...
The primary advantage of this layout is to make the record predicate be constant
time, as opposed to the previous design in which it could be linear in the depth
of the parent chain.
In addition, a number of record operations have been bummed for slightly better
performance, and the layout of record types has been altered to keep track of
the type information in a way that's better organized for generating the record
operations.
There are some behavioral changes:
* This implementation is slightly incompatible with SRFI 131, since it prohibits
a child from having a field name that's the same as one of its ancestors.
I'll probably change this for compatibility.
* Only a root record type can have an applicability method, and that method is
called for all sub-types of that root type. Arguably this is reasonable
behavior.
* Non-root fasdumpable records must have proxy markers for all of their
component types. Previously, only the record type stored in slot 0 needed to
have a fasdumpable proxy. This isn't an immediate issue since fasdumpable
records are used very sparingly at the moment and probably won't be supported
outside of the runtime system.