Diff: Add rename detection

Currently, if a file is renamed, `Diff.Compare<TreeChanges>()` will return two `TreeEntryChanges` structures; one with the original file deleted, and one with the new file added. That just ain't right.

- [x] Marshalling structures
- [x] Sane API
- [x] Tests
- [x] Add `IncludeUnmodified` functionality