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.
Introduce ContactGroup and ContactGroupModel
Allow multiple group IDs for ConversationModel

ConversationModel::getEvents is now overloaded to take a QList<int>,
which can be used to query events for a set of groups.
Add declarative convenience API for ConversationModel
Implement ContactGroup::markAsRead
Expose GroupManager to QML, and remove the instance in ContactGroupModel
Use the correct ring account name in commhistory-tool
Add ContactGroupModel::at
Tweaks to types to make QML happy