add diff/patch module, code clean up
can actually generate a unified diff of 2 trees

so its only for single level trees and the diff does not exactly
match cgits format (eg. a/, b/ filename prefixes, not using Index
with === underline, adding the git tree-diff line with the sha names
of the blobs being diff'd) but the basics seem to work, at least on
the 3 repos I've tried so far.