(/=) Proper clock mechanism

Propsal - I will focus on one of the sync mechanisms, the other case is
symmetric: In addition to the sequencer, we keep a “currentClock” and
the “ownId” in the ChatLogic.When a message is received, we update the
currentClock using that message. Then we add that message to the
sequencer, which may or may not call back directly. When the sequencer
pops a message, it updates the clock of the last popped message using
the newly popped clock.

When we send a message m, we increment the currentClock (tick) and use
that as the clock for the message. Additionally, we add a ChatMessage
for m to the MessageSequencer. When the ChatLogic gets a callback for a
ChatMessage m2, it forwards m2 to its listeners iff m2 was sent by
someone else.

The why: We have to update the current clock on receive, so that we
keep the clock consistency condition: If we receive message m with time
t, then we should only send messages with time greater than t. This
ensures that if something is causally dependent, it has greater time.
We have to add our own messages to the sequencer as otherwise there
could be gaps that are never filled, causing long waits for timeouts.