ocaml-git: add native subtree operations, eliminate git subtree CLI
Add native Git.Subtree.add and Git.Subtree.merge operations to ocaml-git,
completing the native subtree implementation alongside the existing split.
Changes to ocaml-git:
- Add Git.Subtree.add: incorporates a subtree at a prefix from a commit
- Add Git.Subtree.merge: merges updates into an existing subtree (for pull)
- Add Git.Index module: binary index format parser/serializer
- Add Repository.checkout: checks out a tree to the working directory
- Add Repository.add_to_index, commit_index: staging operations
- Add Repository.add_remote, remove_remote: config-based remote management
- Fix Repository.write to skip if object already exists (avoid permission errors)
- Add fuzz tests for config and index modules
- 61 tests total (4 new subtree tests)
Changes to monopam:
- Rename git.ml -> git_cli.ml to avoid shadowing the git library
- Remove Git_cli.Subtree module entirely
- Use Git.Subtree directly for add/merge/split operations
- Git_cli now only provides network helpers (fetch_url, push_refspec)
- No more `git subtree` CLI calls - 72x faster subtree operations