Instead of maintaining a separate client for each type of transport that we support, we can refactor the code such that we have two client classes i.e.[sync, async]
and 4 transport classes i.e.[sync, async] x [gRPC, REST]
similar to what we have in GAPICs.