cdc: new package for content-defined chunking
FastCDC (Xia et al., USENIX ATC 2016) in pure OCaml: a gear rolling
hash with normalized chunking splits byte streams into variable-size
chunks whose boundaries depend on content, not position, so an edit
early in a stream leaves every later chunk boundary (and hash)
intact. Cut over strings, plus a streaming fold over bytesrw readers
with memory bounded by the maximum chunk size.
The gear table is a fixed splitmix64-derived constant: boundaries are
stable across runs and versions (pinned by a regression vector, since
changing them silently degrades deduplication), though no
cross-implementation boundary standard exists. Tests cover exact
tiling, size bounds, boundary suffix stability, streaming/whole-string
agreement at several slice sizes and degenerate all-zero input; the
same invariants run under alcobar on arbitrary bytes.
Separate package rather than part of ocaml-vcdiff: chunking is the
dedup/sync primitive and shares nothing with the delta codec; both
were the missing pieces for delta-based storage and transfer.