network: Get rid of DefaultExecutor
grpc::connect used DefaultExecutor to run the client. Change this to a TaskExecutor passed down from the network task.
This percolates into fetch and bootstrap functions, which have been changed to also use a temporary Runtime instead of using the current thread runtime in the functions, but spinning gRPC tasks in the DefaultRuntime under the hood.
Tangentially, improve error types and logging for fetch and bootstrap, converting to thiserror.