anchor.diff:          match snap.State with
           | Forever v -> avail v
           | Obsolete -> obsolete ()
  -        | Promised q -> JQueue.Add avail q
           | Ready (v, q) -> JQueue.Add obsolete q; avail v
           | Waiting (q1, q2) -> JQueue.Add avail q1; JQueue.Add obsolete q2
   
  
positive.code: 
      let MarkForever sn v =
          match sn.State with
          | Promised q | Waiting (q, _) ->
              sn.State <- Forever v
              JQueue.Iter (fun k -> k v) q
          | _ -> ()
  
      let MarkObsolete sn =
          match sn.State with
          | Forever _ | Obsolete | Promised _ -> ()
          | Ready (_, ks) | Waiting (_, ks) ->
              sn.State <- Obsolete
              JQueue.Iter (fun k -> k ()) ks
  
negative.code: 
  State transitions:
  
      Waiting         -> Forever      // MarkForever
      Waiting         -> Obsolete     // MarkObsolete
      Waiting         -> Ready        // MarkReady
  