precommit: refactor to use ctx type and fix subdirectory handling
- Add ctx type bundling cwd and fs for consistent filesystem access
- find_git_projects now returns git root when running from subdirectory
- Consolidate is_inside_git_repo to use find_git_root (remove duplication)
- collect_dirs handles "no repos found" error centrally
- Better init messaging: distinguish between no repos, no OCaml projects,
and already configured