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 don't think we want to take the author and committer from the reverted commit. This should probably be taken as a parameter (maybe optional). `Revert` for instance takes the `reverter` as a mandatory parameter. In general, I am not sure what we decided on these methods figuring out default values for the author / committer.