Encapsulate business logic in the models

The views and the controllers seemed to know a lot about the internals of the model. This is an anti-pattern.

This patch does the following:
* enforce the MVC style separation of concerns
* add tests for the bathroom model
* refactor the views to take advantage of the introduced encapsulation and to remove duplication

I'll be happy to update or explain parts of the code that are not clear enough.