irmin: add Schema.dispatch for path-based type selection
New Schema.dispatch combinator selects child schema based on the
step name. Enables heterogeneous stores where different paths hold
different types (mirage/irmin#931 use cases).
Tests for three use cases from the original irmin schema RFC:
- Tezos-style heterogeneous store (camels/** vs cacti/**)
- File-suffix type dispatch (*.json -> JSON, *.md -> opaque)
- Per-region merge annotations (LWW, CRDT counter)