GCPCallInvoker updates the channel pool(GcpExtensionChannel) for
each RPC. The idea is:
Before the RPC starts, pick a channel from the channel pool:
- if the RPC is bound to a channel, use that channel.
if the RPC doesn't bound to a channel, use the one with minimum active streams.
After the RPC finishes, update the active stream ref count.
if the RPC is defined as bind, bind the channel with corresponding key like
spanner session name.
if the RPC is defined as unbind, unbind the channel with the key.