fn complete(&mut self) -> Option<(B, Option<(B, B)>)>  {
        match std::mem::replace(self, MergeState::Vacant) {
            MergeState::Vacant => None,
            MergeState::Single(batch) => batch.map(|b| (b, None)),
            MergeState::Double(variant) => variant.complete(),
        }
    }
Immediately complete any merge.

The result is either a batch, if there is a non-trivial batch to return
or `None` if there is no meaningful batch to return. This does not distinguish
between Vacant entries and structurally empty batches, which should be done
with the `is_complete()` method.

There is the additional option of input batches.
differential-dataflow/src/trace/implementations/spine_fueled.rs