refactored large Room type into multiple mixins and added Thing base type