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
- [ ] Sane API.
- [ ] Tests