Adding in more things to support generalization of graph contexts.

GraphContexts will now be called GraphLayers, to serve as a
storage space for node state and values.

GraphOverlays is a new class to collect temporary changes set
to a graph layer.  I'm still not sure I need this but it'll help
me think about the right implementation.  I'm wondering about
where we want to store overlays in a layer, but also apply
them without affecting the layer.  I'm still not sure this is
really more than window dressing for an anonymous layer.  I think
it is and will just complicate things, and I'll likely put the same
logic back in the layer.

I also need to figure out whether layers can be set even after
they're used, with that setting persisted or not, which is
where these graph overlays might be useful.

That is, when a layer is entered for the first time, we
create a new overlay and set its 'main' (or root) overlay to
to this overlay.  The next time the layer is entered (which
must be because it was persisted to a variable and reused),
the root overlay will have already been set, and we just
create a dummy overlay to store any further node overlays
within the layer, which automatically unfolds.