Filter branch

This adds an idiomatic c-sharpy api for doing filter-branch-like operations. This works without ever touching the index or the working directory, so it should be wicked fast.

- [x] Header rewriting (author, message, etc)
- [x] Tree rewriting using `TreeDefinition`
- [ ] Tag rewriting (like `--tag-filter`)
- [ ] Back up original refs to `refs/original`