Fix diff patch line number calculation

This was just wrong.  Added a test that verifying patch line
numbers even for hunks further into a file and then fixed the
algorithm.  I needed to add a little extra state into the patch
so that I could track old and new file numbers independently,
but it should be okay.
Match binary file check of core git in diff

Core git just looks for NUL bytes in files when deciding about
is-binary inside diff (although it uses a better algorithm in
checkout, when deciding if CRLF conversion should be done).
Libgit2 was using the better algorithm in both places, but that
is causing some confusion.  For now, this makes diff just look
for NUL bytes to decide if a file is binary by content in diff.
Merge pull request #1229 from arrbee/fix-diff-patch-line-numbers

Fix diff patch line number calculation
Merge pull request #1230 from arrbee/match-core-git-diff-binary-detection

Match binary file check of core git in diff