improve UX of `swap_cancel` and test more
`swap_cancel` queues an `ExitEvent`, however it doesn't return the resulting exit state, so the user would need to get the swap status another way. Also, this function looks like it's hanging while attempting to exit. It would be good for this function to return updates on what's happening/what's expected to happen based on the current status, as well as the eventual exit status.

It might also be nice to make this non-blocking, and have another function to get the status/result of the cancellation?

Additionally, this needs to be tested more.