fn form_chunk(&mut self) {
        consolidate_updates(&mut self.pending);
        if self.pending.len() >= Self::chunk_capacity() {
            while self.pending.len() > Self::chunk_capacity() {
                let mut chunk = TimelyStack::with_capacity(Self::chunk_capacity());
                for item in self.pending.drain(..chunk.capacity()) {
                    chunk.copy(&item);
                }
                self.ready.push_back(chunk);
            }
        }
    }
Form chunks out of pending data, if needed. This function is meant to be applied to
potentially full buffers, and ensures that if the buffer was full when called it is at most
half full when the function returns.

`form_chunk` does the following:
* If pending is full, consolidate.
* If after consolidation it's more than half full, peel off chunks,
leaving behind any partial chunk in pending.
differential-dataflow/src/trace/implementations/chunker.rs