code tidy

merged DatumUtil and DatumType.

moved unused extract function to the tests
do not duplicate() ByteBuffers

Removed ByteBuffer duplication, compare() is now
responsible for returning the buffers to their original position.

I guess we should never change the position but it is safer for use to use
ByteBufferUtil.compareUnsigned rather than re-implement it. As it uses
the position of the buffer.

With duplicate()

Throughput test 479 ms for 200000 comparisons
Throughput test 84 ms for 200000 comparisons
Throughput test 98 ms for 200000 comparisons
Throughput test 64 ms for 200000 comparisons
Throughput test 65 ms for 200000 comparisons
Throughput test 117 ms for 200000 comparisons
Throughput test 86 ms for 200000 comparisons
Throughput test 77 ms for 200000 comparisons
Throughput test 73 ms for 200000 comparisons
Throughput test 64 ms for 200000 comparisons

Without duplicate()

Throughput test 167 ms for 200000 comparisons
Throughput test 72 ms for 200000 comparisons
Throughput test 52 ms for 200000 comparisons
Throughput test 88 ms for 200000 comparisons
Throughput test 55 ms for 200000 comparisons
Throughput test 51 ms for 200000 comparisons
Throughput test 64 ms for 200000 comparisons
Throughput test 83 ms for 200000 comparisons
Throughput test 52 ms for 200000 comparisons
Throughput test 59 ms for 200000 comparisons
count zero length tokens

see https://github.com/backupify/backupify-comparator/pull/6#discussion_r8895764

Original implementation counted zero length tokens, e.g. X~~9 should be
3 tokens.

Added tests for the same, all tests pass with both zero copy algorithm and
the original reg ex one.