sidechannel: add proxy middleware
This adds gRPC client interceptors that can proxy sidechannels. They are meant to be used in Praefect.
This is part of gitlab-com/gl-infra/scalability#1218 (closed). We will wire this into Praefect in a follow-up MR.
Writing this feature surfaced a race condition in the sidechannel protocol so this MR includes a commit that fixes that race condition. This is a breaking change to the protocol but that is OK because we are not using it anywhere yet.
Edited by Jacob Vosmaer