KEEP-001: converge the three near-duplicate keeper tree-walkers

Keeper carries three copies of the same "recurse a git tree, hold a per-level scratch, collect subtree shas" walker. They drifted apart, and the MEM-023/MEM-024 memory-safety work had to fix the same per-level-1 MiB-buffer bug in each copy separately — the clearest possible signal they should be one function. Per CLAUDE §13 (don't reimplement) and the reuse-not-local-dups rule, fold them into a single keeper-owned walker with a visitor callback. See Keeper.

Issues

The three walkers are byte-similar but each grew its own extra logic, so a fix in one silently leaves the others broken (exactly what happened in MEM-023/024).

Blockers

Planned

One iterative, depth-capped, right-sized keeper walker; the three call sites pass a visitor.

Outcome