We are running into trouble where we can't straightforwardly unmarshal old
cluster graphs (the serialisation of some ignition structs has changed enough
to break unmarshalling). Fundamentally the issue is that the installer does
not intend for the graph to be a stable persisted API, which is fair enough,
but it makes this hard to fix.
Separate graph and persistentGraph:
* graph is a one-time object: create it, resolve it, persist it, done.
* persistedGraph can be read subsequently and, with care, potentially
round-tripped if necessary.
Callers of persistentGraph.get() receive any errors when unmarshalling the
object that interests them, so they are forced to handle it.
Using json.RawMessage also has the side effect that we shouldn't be at as much
risk of accidentally losing data if we ever needed to round-trip the graph.