irmin: add Bloom-slice sync protocol (Journault & Gazagnaire 2014)
Efficient sync of persistent DAGs: cost proportional to the difference,
not the total history. The client partitions its history into fixed-size
slices, each encoded as a Bloom filter. The server walks backward from
its heads, stopping at Bloom matches. Stateless server, self-correcting
(false positives cause redundant transfer, never data loss).
Three layers in Sync:
- Anti-entropy gossip: exchange branch head vectors (Demers et al. 1987)
- Bloom-slice: transfer missing blocks via Bloom-compressed rounds
- Bloom filter: probabilistic set membership (~1% FP, FNV-1a probes)
Also keeps merkle_diff for direct-access scenarios (local heap sync).
11 sync tests: gossip (3), merkle descent (2), bloom-slice (4),
bloom (2). 48 total tests in the irmin suite.