loadCheckpoint
Load the checkpoint (state + cursor) as ONE consistent snapshot — both keys from a single DataStore emission, so the pair can't be torn across a concurrent write. Returns null if EITHER half is missing or the state fails to deserialize (a legacy state saved by saveState has no cursor → reads as absent → caller does a clean full sync that establishes the cursor). The returned ZswapCheckpoint.state is owned by the caller and must be closed.