Fix case insensitivity issues in git_status_file

This is designed to fix the strange `git_status_file` behavior reported (with test) in #1195.

The heart of the issue is that on a case insensitive file systems, the start/end iterator range is applied incorrectly to the tree iterator because it is applied before the case insensitive sorting is applied. This use of ranges comes into play anytime a pathspec is used, but is probably most easily seen with `git_status_file` which is internally creating a very narrow pathspec.

The fix proposed in this PR is to move case insensitive sorting inside the tree iterator implementation so that it can apply the start and end range limits correctly.

- [x] cherry pick test of case altered `git_status_file()`
- [x] update iterator API for case sensitivity controls
- [x] add tests of iterator ranges using ignore case
- [x] move ignore case into tree iterator for valid range checking
- [x] confirm spoolandsort not being used
- [x] confirm no memory leaks
- [x] confirm cross platform compat