[xla:gpu] Extend the collective pipeliner to support pipelining collective
[xla:gpu] Extend the collective pipeliner to support pipelining collective
operations with control dependencies.

Add should_allow_control_dependencies to the collective pipeliner configuration
to allow pipelining collective operations with control dependencies. The
control dependencies will be dropped when the operation is pipelined. This is
currently only used in kBackward pipelining.

In the GPU compiler, we make Send as a control predecessor of its corresponding
RecvDone, to prevent certain optimizations, in particular, the fusion of the
computation that calculates the Send data and the computation that uses the
Recv result. This extension to the collective pipeliner allows the GPU compiler
to pipeline RecvDone operations with a Send as their control predecessor.

Modify an existing test to test the situation.
