Add support for generating Etags for GETs to /.

Uses MD5 hash of body. N.B. that according to RFC2616, the etag
ought to vary depending on the response's Content-Encoding, so
that gzipped responses have different etags from non-gzipped
responses. However, Google App Engine does not give our app
access to either the Accept-Encoding header on the request or the
Content-Encoding header on the response, as it prefers to handle
compression itself. The upshot of this is that I suspect that
it won't correctly modify the etags for this (will have to test
once deployed). If it doesn't modify the etags for gzipped vs.
non-gzipped responses, then we'll probably file a bug, since it
is possible to do this losslessly, but in the meantime it will
mean we'll have to mark these responses as Cache-Control 'private'
since a shared cache may not be able to distinguish properly.
If it does modify the etags, though, then that's great.