So much fail :-/
Stuff
I guess this works?
Fix the bugs
Fix race condition on startup when creating directories are async
Add JSON Serialization settings static value

This allows users to override JSON serialization settings, primarily to
enable TypeNameHandling
(http://stackoverflow.com/questions/7094955/json-deserialization-with-an-array-of-polymorphic-objects)
Create an interface to explicitly handle object serialization - if the blob cache supports it, defer to it
Add extra overloads to use Task instead of IObservable
Change interface of Invalidate to return completion

Invalidate and InvalidateAll currently are assuming that even though
delete is an asynchronous method, we treat it as synchronous (because on
NET 4.x it is), and generally do dumb stuff. Fix it to correctly respect
completion
Implement completion in BlobCache
Always do the InvalidateAll work, even if nobody subscribes
Honor serialization settings and IObjectFactory
Added some asserts

Code analysis was warning me of the potential null situation. I'm pretty
sure these things can never actually be null, but doesn't hurt to have
an assert just in case. After all, that's what they're there for. :)
Fixup project references for GH4W - DONT MERGE THIS INTO MASTER