anchor.diff:  
   type CurrentDoc = (MyCountingDoc * RavenJObject * Etag)
   
  -type BulkRavenProjector 
  +type EventContext = {
  +    Tenancy : string
  +}
  +
  +type BulkRavenProjector<'TEventContext> 
       (
           documentStore:Raven.Client.IDocumentStore, 
  -        processors:seq<DocumentProcessor<Guid, CurrentDoc>>
  +        processors:seq<DocumentProcessor<Guid, CurrentDoc, 'TEventContext>>
       ) =
   
       let serializer = Raven.Imports.Newtonsoft.Json.JsonSerializer.Create(new Raven.Imports.Newtonsoft.Json.JsonSerializerSettings())
  
positive.code: 
              (newDoc, metadata, etag)
  
          let matcher (objEvent : obj) : DocumentHandlerSet<Guid,CurrentDoc> =
              match objEvent with
              | :? (Guid * int) as event ->
                  let (key, value) = event
                  
                  let handler : DocumentHandler<CurrentDoc> =  processValue value
                  let handlers = handler |> Seq.singleton
  
                  (key, handlers) |> Seq.singleton
              | _ -> Seq.empty
  
          let processors = seq {
              yield {
                  ProcessorKey = "Mine"
                  GetDocumentKey = (fun (key:Guid) -> "MyCountingDocs/" + key.ToString())
                  EventTypes = Seq.singleton typeof<int>
                  Match = matcher
                  NewDocument = buildNewDoc
              }
          }
  
          let projector = new BulkRavenProjector(documentStore, processors)
  
          seq {
              yield async {
                  for (key,value) in myEvents do
                      do! projector.Enqueue key value
                  do! projector.WaitAll()
              }
  
  
negative.code:         do! loop ()
      }
  
      let grouper event =
          processors
          |> Seq.collect (fun x -> 
              x.MatchingKeys event
              |> Seq.map (fun k9 -> (k9, x)))
          |> Set.ofSeq
  
      let queue = new WorktrackingQueue<(Guid * DocumentProcessor<Guid,CurrentDoc,_>), SubscriberEvent<'TEventContext>>(grouper, processEvent, 10000, 10);
  
      member x.Enqueue subscriberEvent =
         queue.Add subscriberEvent
     
      member x.WaitAll = queue.AsyncComplete
  
  