Add Ignore support

This PR adds support for the new .gitignore methods in libgit2
Re-enable skipped hard reset test
Update checkout in response to libgit2 checkout changes
Add checkout tests
Checkout branch as snapshot
Add TODO comment
Small documentation fix
Fix some compilation warnings
Enhance checkout test coverage
Introduce OrphanedHeadException
Update libgit2 binaries to 586f71e

https://github.com/libgit2/libgit2/compare/7dfc5c3...586f71e
Make Checkout raise proper MergeConflictException
Enhance Index.RetrieveStatus() test coverage

Partially fix git-tfs/git-tfs#231
Tidy up OdbBackendFixture code
Ensure Checkout() doesn't mess with binary files

Fix #302
Refactor reference building
Add optional ignoredErrorCodes on git_foreach
Improve exception message when configuration file is not found

Indicate which configuration level caused the exception.
Update test repository with libgit2 logo
make Configuration#Get methods virtual

The commit
https://github.com/libgit2/libgit2sharp/commit/3d29d95dc7d0addc889679c93d22952fe7bb9d35
moved #Get overloads to extension methods. The problem is the remaining
#Get methods aren't virtual, which means you can't stub in unit tests.
Which broke a bunch of GHfW tests.