[libcommhistory] Add extraProperties API to Event

    Extra properties are arbitrary key/value properties that can be attached
    to an event. They're intended to be used for temporary or uncommon
    values attached to an event, since they are more expensive to query. The
    immediate use case is certain MMS-related properties, and it will also
    replace some of the less commonly used properties of Event.

    A database flag is used to avoid the query overhead when no extra
    properties exist on an event.

This also adds AutoSavepoint as a database utility class. It creates a database savepoint and rolls back automatically when uncommitted on destruction. Unlike transactions, savepoints can be nested (even inside normal transactions). The top-level savepoint behaves in the same way as a BEGIN/COMMIT transaction.