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.
Should we take an optional argument? Cherry-Pick usually takes the commits author/commiter as the signature. And it uses yours when there are conflicts, which the consumer would set if they get conflicts.