Replace `git status --porcelain -uall` with `git diff-index` (6x faster
for tracked changes) and `git ls-files --others` for untracked files.
Add mtime-based caching keyed on .git/index mtime, HEAD SHA, and tree
mutation cursor to make repeated calls near-instant (~14ms vs ~1000ms).
Empty changesets are never cached to ensure external file edits are
always detected on the next query. Falls back to git status for repos
with no commits (empty repo edge case).