Refactor group querying logic into GroupManager and GroupObject

This separates the logic to query groups, update groups in response
to events/signals/contacts and to modify groups away from GroupModel.
The intent is to allow using groups with a more sane API than
QAbstractItemModel, and sharing the same data between several models.

Also introduces GroupObject, which is a QObject-based API serving the
same purpose as the value-based Group. That is much more convenient,
particularly to allow signals for changes to a group. GroupObject is
used exclusively by GroupManager for now.

All existing logic and API (including GroupModel) is unchanged for now.
WIP: Introduce ContactGroup and ContactGroupModel