Transcript Window should be recomposable
The original problem defines that chat messages are sometimes displayed out of order. The direct cause
of this is unknown (I suspect threading/timing issues). To work around the issue, this commit now
adds the capability to recompose the entire transcript window from memory.
A drawback of this is that a(nother) copy of the chat is now kept in memory (the 'entries' list that
is now added to TranscriptWindow). This might make Spark use more memory.
I've opted for a rewrite, as in the course of applying fixes to the existing code, I repreatedly got
lost in the jungle of reuse of styling, particularly. This commit adds new classes for all types of
entries in the Transcript Window (typically, a chat message), and makes each class responsible for
creating a UI representation of that type of entry. This removed quite a bit of boiler plate code.
As each entry now contains the original message, it's make-up as well as timestamp, the transcript
window is easily redrawn when messages start to arrive out of order. That bit is now implemented as
a responsibility of the TranscriptWindow class.
Various smaller changes were made:
ctrl-space nickname completion in a MUC now no longer considers users on your roster (but not in the MUC)
ctrl-space nickname completion now works for users that have no VCard (uses node-part of the JID instead)
message color is now configurable (but still defaults to black).
Being able to recompose the transcript window will be handy when we want to implement https://xmpp.org/extensions/xep-0308.html