Store, use and send etags.

We use them to validate/invalide cached but expired data.
We send Match-If headers to prevent mixing of old/new cached data.

This should all be safe to do, since the HTTP cache already sends
etags to manage it's internal cached state, this CL just extends
this behavior to apply to client-side in-memory cached data as well.

BUG=504194

Review-Url: https://codereview.chromium.org/2338963002
Cr-Commit-Position: refs/heads/master@{#419264}
5 files changed