Improves tab completion in chat.

Pressing tab after completion now cycles to the next candidate.

Moves the completion code in LobbyLogic and InGameChatLogic to a common class.
I think you want `.Distinct()` here, too.