Distributed Cache & Session

This includes IDistributedCache, a Redis implementation, an MemoryCache implementation.

It also includes Session middleware.

See https://github.com/aspnet/HttpAbstractions/pull/138 for related object model additions.

The goal is to get this reviewed and merged before continuing on with the concurrency work. It's expected that IDistributedCache design will need adjustments at that point, so please focus on the Session API and behaviors for now.
Question: What if I want a memory cache for my own memory cache purposes, plus I happen to also currently use memory cache as my provider for distributed cache. Would I not want two different sets of `MemoryCacheOptions` for this? I presume it is somewhat unlikely that I'll want the *exact* same options on both, no?