(not a performance issue; we don't queue up tons of messages. only use
deque when you really need constant time access to the beginning, eg.
for large objects, since deque has both memory overhead and is much
slower than vector for access to the end of the list, since it can't reserve like
vector can)
do them later in the update. This allows threadsafety (sending messages from
other threadS), and will eventually be merged with ScreenMessages. This
doesn't mean that all messages have to be delayed; we can send messages
to an actor directly, like SendMessageToTopScreen. This only affects broadcasted
messages, which act like PostMessageToTopScreen(x, 0).
"GroupName" -> "SongGroup" to make room for CourseGroup
replace checks for "cvs" with a call to StripCvs()
m_Rows -> m_pRows
broadcast on preferred group changes
move sync display/saving out of complicated ScreenGameplay
show sync UI in editor playback as well as gameplay
revert sync from in-memory backup, not from disk
move more functions into debug overlay