Improved patch support

This PR tries to address some of the issues with diffs and patches. The current diff API requires a callback in order to retrieve a diff/patch. This is now slightly easier with the use of:

 ```
my @patches = $diff -> patches;
my $full_patch = '';
map { $full_patch .= $_ -> buffer } @patches;
print $full_patch, "\n";
```
It is now also possible to get some actual information/statistics from the diff with the introduction of ```DiffDelta```, ```DiffHunk``` and ```DiffFile```.