Merges the source sketch into the target sketch that can have a smaller value of K.
However, it is required that the ratio of the two K values be a power of 2.
I.e., source.getK() = target.getK() * 2^(nonnegative integer).
The source is not modified.
Note: It is easy to prove that the following simplified code which launches multiple waves of
carry propagation does exactly the same amount of merging work (including the work of
allocating fresh buffers) as the more complicated and seemingly more efficient approach that
tracks a single carry propagation wave through both sketches.
This simplified code probably does do slightly more "outer loop" work, but I am pretty
sure that even that is within a constant factor of the more complicated code, plus the
total amount of "outer loop" work is at least a factor of K smaller than the total amount of
merging work, which is identical in the two approaches.
Note: a two-way merge that doesn't modify either of its two inputs could be implemented
by making a deep copy of the larger sketch and then merging the smaller one into it.
However, it was decided not to do this.