Sketch of nat and list.

For nat, we basically have the correct type meaning. We're limited in
doing anything useful to distinguish between numbers because of the
restriction on one val and one def per object creation.

For list, we need expansion on type selection, so that r.List & { type E
= l.E } can be meaningfully selected on.
remove %.