Fix threading and cleanup issues on Collider

Fixes these issues on Collider:
1. accessing the room/client data is now thread safe
2. sets a max count limit on each client's message queue
3. removes the record of a client if it has not registered after a 5s time out
Another option would be to use a  "<- chan struct{}" that sends one empty message when the client is registered.  

Then, the code that waits for it to be registered could do something like:

select {
case <-client.registered:
    // handle it being registered
case <-time.NewTimer(5 * sec):
    // handle the timeout
}