DRILL-2718: Move counting and tracking of sent batches to FragmentContext
Creates wrapper classes FragmentDataTunnel and FragmentUserDataTunnel which wrap
the DataTunnel and UserClientConnection, respectively, allowing us to use DataTunnels
and UserClientConnections from a global pool, but track pending batches and send status
at the FragmentContext level.
Consolidates the various StatusListener implementations used by the various senders and
instead uses just one implementation.