anchor.diff:    Started -> Paused
     Started -> Halted
     
  -  Paused -> Started
  +  Paused -> Starting
     Paused -> Halted
   
     Halted -> Final (GC-ed here)
  
positive.code: 
  type internal Agent<'T> = AutoCancelAgent<'T>
  
  (* cancelling through dispose *)
  type RecvMsg =
    Start
    | Pause
    | Halt
    | SubscribeQueue of QueueDescription
    | UnsubscribeQueue of QueueDescription
    | SubscribeTopic of TopicDescription
    | UnsubscribeTopic of TopicDescription
  
  type WorkerState =
    { QSubs : Map<QueueDescription, ReceiverSet list>;
  
negative.code:         async { 
            let! msg = inbox.Receive()
            match msg with
            | Start -> return! starting state
            | Halt -> return! halted state
            | _ as x -> logger.Warn(sprintf "got %A, despite being paused" x) }
  
  