Replace custom fnmatch/hidden logic with PathSpec (GitWildMatchPattern) to get true .gitignore semantics.
Highlights:
- Supports !, /, and ** patterns; defaults to ignoring dotfiles via .* (can be overridden with negation).
- build_ignore_spec composes DEFAULT_EXCLUDED_* plus .zipignore/CLI patterns.
- _collect_negation_prefixes prevents over-pruning by keeping dirs that might contain re-included files.
- collect_files now matches with spec and prunes topdown only when no negated descendants are possible.
- Drop fnmatch import and remove is_hidden, normalize_rel, should_exclude helpers.
- On missing dependency, print install hint to stderr and exit(3) (pip install pathspec).
BREAKING: introduces runtime dependency on pathspec.