v0.0.38: Client: handle graph cache internally
This moves the graph caching on the library side to better handle failure cases: When the last tx was successful, we can reuse the last graph to avoid a read, but when we have an error, the remote graph state is unknown, so we must refresh it.