Patches can now come from a variety of sources - either internally
generated (from diffing two commits) or as the results of parsing
some external data.
Handle the application of binary patches. Include tests that
produce a binary patch (an in-memory `git_patch` object),
then enusre that the patch applies correctly.