Introduce revert

This builds upon @ben's great initial work to introduce the ability to revert a commit

I followed the same pattern for the `Signature` parameter as is used for `Merge`. If we want to update this pattern in general, I say we do that as a separate commit for all affected API's