Replace List and Dictionary in User.Channels and User.Ranks with ReadOnlyDictionary
Don't create objects in Factory when joining channels
Do not send WHO message twice on join

Two who messages were sent on each join (one from NamesMessage, one from
JoinMessage