Add DraftsModel

This can be used to query draft events related to a list of groups
Clarify draft event handling

Drafts are not visible in ConversationModel, but can be used as the last
event in a group.
Add Group::lastEventIsDraft property

The code duplication here is awful, and the lastEvent properties should
really be combined into a single reference to an Event instead. Those
are refactors for another day, however.

This is equivalent to the isDraft property of the latest event in a
group.
Add declarative DraftEvent object for manipulating drafts

DraftEvent can be used, generally in combination with a DraftsModel, to
read and modify properties of draft events, or create new draft events.
Add DeclarativeGroupManager::ensureGroupExists method

This can be used to find the ID of the group matching a
localUid+remoteUids and create one if not already present.
Merge pull request #87 from special/draft-storage

[libcommhistory] Add API for storing and querying draft events