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.
Yes we usually use 0 as a never expire ttl but we may not want to accept this as a valid value.