Update CheckoutPaths method to handle null or empty paths parameter

Fixes an issue where passing an empty enumeration to CheckoutPaths results in the entire commit being checked out - which is not how I expect the method to operate. Instead, this method will now ensure that the path parameter is not null and if the path parameter is an empty list the method will return without checking out any paths.
Prevent Sha regeneration in the OdbBackend
Allow handling of odd-sized short Shas in OdbBackend
Refactor OdbBackEnd
Teach repo.ObjectDatabase to enumerate GitObjects
Fix OdbBackEnd ForEach prototype
Introduce RewriteHistoryOptions

RewriteHistory's multiple optional parameters make evolving the API
difficult. In particular, there was no way to change the parent
rewriter to operate on the full commit without a breaking change
(due to ambiguous overloads with sparse parameter use).
Map rewritten parents to rewritten commits
Update libgit2 binaries to eb04744

https://github.com/libgit2/libgit2/compare/7940036...eb04744
Make OdbBackend interface ObjectId based
Enforce OdbBackend test coverage
Prove that #379 is fixed in libgit2
Add TreeDefinition.Remove(IEnumerable<string>)
Add RewriteHistoryOptions.PruneEmptyCommits
Simplify Ensure.HandleError() GitErrorCodes to LibGit2SharpExceptions mapping
Add strongly-typed LockedFileException
Clean up trailing whitespaces
Does not throw when parsing a Remote with no url

Fix #484
Teach Index.Stage to stage files in ignored dirs

If a directory is ignored and you attempt to stage
a file beneath that directory, the file is not
staged.  By having diff return files beneath that
ignored dir, we can add that file.
Add Config.GetValueOrDefault() extensions