Group updates

This builds upon #82 to provide an API for caching groups in other apps.

Merge #82 first.