Clean up rpc_server shutdown logic. Cleanup clients at unit test shutdown time. cancel_and_wait on client's start() task in it's destructor, because otherwise this task will continue to run after client is deleted, which will result in a crash in unit tests as it waits on the on_quit promise in the rpc_server (whose lifetime is controlled by the client).
The simulated network can call broadcast in multiple tasks (e.g. from a regular transaction operation and another from the delegate_loop task when it creates a block). The 2nd task could overwrite the promise from the first task, resulting in a crash when the promise was being waited on inside the broadcast. The proper solution in this case was to remove the wait, since a wait inside the broadcast doesn't accurately model network operation anyways.