anchor.diff:            match msg with
             | Pause -> ct.Cancel() ; return! paused state
             | Halt -> ct.Cancel(); return! halted state
  -          | SubscribeQueue qd ->
  -            (* todo *) return! started state ct
  +          | SubscribeQueue(qd, cc) ->
  +            let! pairs = initReceiverSet qd newMf cc
  +            for Pair(mf, rs) in pairs do
  +              for r in rs do Async.Start(r |> worker, ct.Token)
  +            let qsubs' = state.QSubs.Add(qd, pairs)
  +            return! started { QSubs = qsubs' ; TSubs = state.TSubs } ct
             | UnsubscribeQueue qd ->
               (* todo *) return! started state ct
  -          | SubscribeTopic td ->
  +          | SubscribeTopic(td, cc) ->
               (* todo *) return! started state ct
             | UnsubscribeTopic td ->
             (* todo *) return! started state ct
  
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:   Started -> Paused
    Started -> Halted
    
    Paused -> Starting
    Paused -> Halted
  
    Halted -> Final (GC-ed here)
  