Implement snapshot import cmd
`clio_snapshot --server --grpc_server 0.0.0.0:12345 --path
<snapshot_path>`
Implement snapshot range cmd
`./clio_snapshot --range --path <snapshot_path>`
Add
LedgerHouses: It is responsible for reading/writing snapshot data
Server: Start grpc server and ws server
There was a data race inside `CoroutineGroup` because internal timer was
used from multiple threads in the methods `asyncWait()` and
`onCoroutineComplete()`. Changing `registerForeign()` to spawn to the
same `yield_context` fixes the problem because now the timer is accessed
only from the same coroutine which has an internal strand.
During debugging I also added websocket support for `request_gun` tool.
In this PR:
1 We create a golang grpc client to request data from rippled
2 We store the data into the specific place
3 Add unittests
4 Create build script, the build can be initiated by set conan option
`snapshot` being true.
Please ignore the grpc server part. It will be implemented in importing
tool.