Add mmap-first plan/resolve/hydrate tree APIs for zero-copy flow
Implement the Option C direction by introducing explicit staged tree methods that separate planning, reference resolution, and hydration:
- plan_session_tree -> StageResult<SessionTreePlan>
- resolve_session_tree -> StageResult<SessionRefTree>
- hydrate_session_tree -> StageResult<SessionHydratedTree>
This adds reference-tree node types (SessionRefNode/MessageRefNode/PartRefNode) and plan types keyed by canonical key structs. The resolve stage now maps files into MappedSpan leaves instead of eagerly deserializing payloads.
In the storage layer, add MappedSpan and span helpers (read_span/read_session_span/read_message_span/read_part_span/read_diff_span + parse_span). read_json now routes through span parsing, so the zero-copy substrate is used consistently.
Also wire new public exports for the staged/ref-tree API surface and mapped span type.