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.
`room` should be a string here, so being 0 should never happen.
After that, this parameter comes from a json payload and we don't check the correct type of it, so it's still possible, but should be considered as a malformed payload.

Should we add this in this PR?