Add support for client-side cache to the Cached action combinator

Server-side cache is usually used to save computation time while client-side cache is usually used to save bandwidth. These two properties are not always related but I think it makes sense to make the `Cached` combinator support both client-side and server-side caches.

I’m not sure of two things in this pull request:

 * I generate two cache keys from the single `key: RequestHeader => String` function. The second key is used to save the resource `Etag`.
 * I used `Iteratee#map` instead of `Iteratee#mapDone`. What the difference between those? The type signatures are the same.