WIP: 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.

*** WORK IN PROGRESS - PLEASE DO NOT MERGE ***

Currently, I've made the API changes necessary to add this functionality and made some related fixes and tests, but I haven't actually fixed the tree iterator implementation.