Improve building ignore file lists

The routines to push and pop ignore files while traversing a
directory had some issues. In particular, setting up the initial
list would sometimes push an ignore file before it ought to be
applied if the starting path was a directory containing an ignore
file. Also, the pop function was not always matching the right
part of the path and would fail to pop ignores from the list in
some cases.

This adds some tests that exercise a particular problematic case
and then fixes the problems that I could find related to this.

At some point, I'd like to isolate this ignore rule management
code and rewrite it, but that's a larger project and right now,
I'll opt to just try to fix the broken behaviors.
Improve and comment git_ignore__pop_dir

This just cleans up the improved logic for popping ignore dirs
and documents why the complex behavior is needed.
Merge pull request #1768 from arrbee/issue-1766-gitignore-weirdness

Fix issue 1766 - bugs in managing ignore file lists
odb: free object data when id is ambiguous

By the time we recognise this as an ambiguous id, the object's data
has been loaded into memory. Free it when returning EABMIGUOUS.