Commas in etag break browser caching

The Etag value used by the `Cached` class include an unquoted date string containing a comma. This is parsed by the browser as a list of headers, so Chrome sends the first token of the string for If-None-Match. For example, chrome requests "If-None-Match:Sun" for the header: "ETag:Sun, 20 Dec 2015 20:11:43 GMT".