Fix persistent command cancellation
Fix persistent command cancellation

Summary:
`flow lsp` can send `CancelRequestNotification`, which gives us a request ID and asks us to cancel that request. {D13617364} broke the behavior and this diff fixes it. The general idea is as follows:

1. As soon as we get a cancel notification, add the ID to the canceled requests set.
2. When a request comes in or runs with the canceled ID, cancel that request and immediately respond that the request has been canceled.
3. When we go to run a request that has been canceled, skip it's normal handler and instead respond that the request has been canceled.
4. When the nonparallelizable cancel notification workload finally runs, remove the ID from the set. We're guaranteed that the canceled request will not show up later *)

Reviewed By: jbrown215

Differential Revision: D13738838

fbshipit-source-id: b715afa4a18e3f921c09c76bd37bcdd849579a60

nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow,nmote/flow