Abstract Rooms and Users in their own objects

I made a small abstraction for `Rooms` and `Users`.
I would like @ametaireau's opinion on that before merging.
if room === 0 then a new id will be generated.