This branch ensures that all conversation clients use timestamps for their outgoing messages that are later than the timestamp of any existing message that's visible in the conversation. This will ensure that when messages are displayed in timestamp order, any change to the self-destruct timer is only shown once.
Private group invitation messages are a special case. The timestamp needs to be chosen before creating and storing the message, because the timestamp is covered by a signature in the message body. To ensure that the self-destruct timer is consistent with the timestamp, we look that up at the same time as choosing the timestamp, before creating and storing the message.
In future I'd like to refactor the asynchronous process of creating and storing the message into the core (and likewise for other clients), but this requires a solution for returning the results of asynchronous tasks to the UI, which goes beyond the scope of this ticket.
Second part of #1832 (closed).