Add caching to sitemap

These changes add a fragment cache around the sitemap subtree rendering point. A sitemap sweeper is also added which invalidates the fragments when changes are made to the tree.

Large trees may take multiple requests to fully render. Each request will cache more of the tree, until enough has been cached to complete the rendering in time. A pathological tree which is very flat may have nodes which can never be rendered in time, and so will never render.

Edits only invalidate the fragments along the path of the node.

Performance was improved significantly in testing.
An 11,000 node tree took 500 seconds for first render, with subsequent rendering from cache taking 5 seconds.
Using memcached as the backing store for the fragments had no significant impact.