Allow subclasses of RootResource to provide additional data.

RootResource no longer hard-codes the structure of the resource data.
Subclasses can now override serialize_root() to provide additional data.

In order to allow caching to work correctly with custom data, we now use
a repr() of the data instead of assuming certain contents when
generating the SHA1 for the ETag.