we have basic support with `WriteSnapshot`, but to support async snapshotting, we need: - take a in-memory snapshot - this means we need to support copy-on-write on the `MemNode`s. - start a go-routine which do the actual snapshot work - after the new snapshot created successfully, catch-up with later change sets, and switch.