cancel method

Here are the final few commits for a `Participant.cancel` method. Next step is to wire up UI to call this. Probably back over to #2412 for that.

Follow-on from #2470.