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.
I think key validation should be done here, so that a caller will immediately know they are using a key length that is too large. Otherwise they won't find out until way, way, waaaaaay too late and it'll be that much more difficult to debug.