ignore: adjust test for negating inside a dir

Given

    top
    !top/foo

in an ignore file, we should not unignore top/foo. This is an
implementation detail of the git code leaking, but that's the behaviour
we should show.

A negation rule can only negate an exact rule it has seen before.
ignore: match git's rule negation rules

A rule can only negate something which was explicitly mentioned in the
rules before it. Change our parsing to ignore a negative rule which does
not negate something mentioned in the rules above it.

While here, fix a wrong allocator usage. The memory for the match string
comes from pool allocator. We must not free it with the general
allocator. We can instead simply forget the string and it will be
cleaned up.
doc: add documentation to all the public structs and enums

This makes them show up in the reference, even if the text itself isn't
the most descriptive.

These have been found with

    grep -Przon '\n\ntypedef struct.*?\{' -- include
    grep -Przon '\n\ntypedef enum.*?\{' -- include
Merge pull request #2748 from libgit2/cmn/doc-all

doc: add documentation to all the public structs and enums
Merge pull request #2746 from libgit2/cmn/neg-ignore-dir

Fix negative ignores withing ignored dirs
Fix broken test suite on Windows
Fix broken merge tests due to autocrlf was not false
Merge pull request #2751 from linquize/broken-test-win

Fix broken tests on Windows
Removed unused code
Removed outdated documentation
Always use GIT_HASHSIG_SMART_WHITESPACE when diffing for merges

git_merge_tree_flag_t cannot contain any GIT_DIFF_FIND_xxx flags so there's not point in checking for them
Properly handle errors from git_hashsig_compare()
Changed git_hashsig_option_t to be a bitfield
Added cl_git_rmfile()
Added GIT_HASHSIG_ALLOW_SMALL_FILES to allow computing signatures for small files

The implementation of the hashsig API disallow computing a signature on small files containing fewer than a few lines. This new flag disables this behavior.

git_diff_find_similar() sets this flag by default which means that rename / copy detection of small files will now work. This in turn affects the behavior of the git_status and git_blame APIs which will now detect rename of small files assuming the right options are passed.
Update documentation