Add a version of KeyedOperationsQueue that has an option to shut down
Resharper: Not Even Once.
Serialize operations, handle async shutdown

Note to self: commit more often. This giant commit does two main things:

1. It pipes all operations in PersistentBlobCache through KeyedOperationQueue
   so that, for example, a Invalidate + Set can't ever Invalidate last.

2. It adds a new Observable to IBlobCache called Shutdown, which signals at
   the completion of Dispose.
We have to do sync things outside the op queue since it will be shut down
Make sure tests wait until the blob cache cleans up