Decided to reimplement this in phases, to give a clear revision path.

First version uses a flat datastore with computable and settable nodes.

Once that is done I'll add the ability to "stack" datastores, where
a higher datastore hides values in the lower one.

Once that is done I'll add the ability to save datastores.  That is,
to create datastores that can be stacked and unstacked on an on-
demand basis.  This will mean saving out any user set values,
basically, but not values recomputed because of these datastore-
specific sets.