Fix subtree split producing duplicate-tree commits
The split was faithfully reproducing revert-redo cycles from the monorepo
history (caused by subtree merges importing stale upstream state). This
made push fail with non-fast-forward errors because each split produced
different commit hashes than the previous --clean push.
Fix: replace should_skip_commit (which only checked the first parent)
with find_existing_split_with_tree, which walks the entire split ancestor
chain looking for a commit with the same tree. When found, the current
commit is collapsed to that existing ancestor instead of creating a
duplicate.
Before: ocaml-agent split had 36 commits with 30 unique trees (6 dupes)
After: 30 commits with 30 unique trees (zero dupes)
Also fix monopam push to force-push when freshly cloning a checkout,
since the remote and split histories are independent lineages.
Added 3 subtree split tests: basic split, skip unrelated commits,
and no duplicate trees (the regression test for this bug).