loadNodes
Load all stored nodes.
The engine never calls this — the in-session node DB is reseeded from the Stage 2 handshake snapshot on every connect, not hydrated from storage. This accessor exists for hosts: read previously-persisted nodes while disconnected (offline node list) or verify persistence in tests.
Suspends while the backend reads from disk; cancellable. If the caller's coroutine is cancelled mid-read the implementation must rethrow kotlin.coroutines.cancellation.CancellationException.
Return
a map of NodeId → NodeInfo, or an empty map if no nodes have been stored