Big Shift to how CachingStores/Layers work.

**Best to look at first commit only.**
**WIP do not merge**

Essentially the volatile cache set and get will force the users to store
the IVolatileCacheEntry<TData> entry in the underlying store.

1. Allows full expiration support for all types of volatile cache stores.
Consider exes and windows services, dictionary based.
2. Puts another layer on top of the underlying cache store to provide a
more consistent expiration experience.
3. Super cleans up the GCS ILongTermLookupService interface that on here yet.

I added both DataContract and Serializable support using the default, but
not required as the Actual volatile cache write can handle serialization.

I did not put the IVolatileCache override, but it would go on the
BlendedCacheConfiguration object some type of Type/Factory method.

I also have not modified TData IVolatileCache.Get<TData> except in some of
the mocking classes.