Introduce Repository.CherryPick.

Okay so, this is pretty weird, but from the looks of it, CherryPick has lots of copied stuff from RevertOptions and GitRevertOpts (basically a 1:1 mirror.)

Also, the unit test are not yet complete. Imo, they should include almost the same tests as RevertFixture. But using MergeRepo as the test repo since it is already branched.
I might `Ensure` that `committer` is not null here. We also appear to be missing this check in `Commit`, but I think it would eventually get caught in `ObjectDatabase.CreateCommit`