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.
Yes it can, ArraySegment is a struct, so `new ArraySegment<byte>()` gets you a null array.