anchor.diff:  // providers (event source names), and every time we pick up a message, we
   // push it to the returned IObservable.
   //
  -// This session is shared across all running azmon processes.
  +// This ETW session is shared across all running azmon processes. The Session
  +// instance returned will stop sending events when it is Dispose()d.
   let start name (names: string list) =
       let sess = createSession name
       enableProviders names sess
  
positive.code: // Stop monitoring. This disposes the event session, so will stop receiving
  // events for all running azmon processes on this machine. Further, you
  // will not collect events in the session until you call start again.
  let stop session =
      let r = session.Trace.Stop(noThrow = true)
      session.Trace.Dispose()
      r
negative.code:     with
      interface System.IDisposable with
          member x.Dispose() =
                  x.Subject.OnCompleted() // Tell our listeners we're done!
                  x.Subject.Dispose()
                  // Don't Dispose() Trace, because that should live on until we call Monitor.stop.
  
  let (|Null|Value|) (x: System.Nullable<_>) =
      // Apparently GetValueOrDefault is faster, and the Unchecked.defaultof<> cannot
  