Refactor user room-join code

Logic should be more straightforward now
Merge join reporting with other updates if possible

This cuts down on reporting delay and bandwidth usage very slightly,
and makes sure join reporting is done in order. It uses slightly
more RAM because of more frequent userList updates. Overall, not
a very big change.