Fix caching/marking of default values for mutable fields

Also improves field defaults (so that they are deepcopied if they are
mutable, and not otherwise), adds a suite of tests of the fields api,
and cleans up handling of mutation in the presence of the various field
caches.