RFC: Proposed reworking of diff APIs

This completely scrambles the diff APIs, splitting out a new `include/git2/patch.h` with the functions to create and access patch objects.  This also completely changes the helper functions that allow formatting output from a diff.

Many of the auxiliary structs have been updates including minor changes to the `git_diff_delta` and the addition of `git_diff_hunk` and `git_diff_line` structs to simplify passing data around.

I have scaled back the extent of the API changes from the original proposal (for example, instead of renaming `git_diff_delta` to `git_delta`, I decided to leave it as is). I tried out almost all of the original proposed changes and deemed them to not be improvements in the end.