Add validate_attrs to objects.py

 - Decorator that checks to make sure that the required attributes have been set in the init method
 - Raises an exception if a required attribute is missing
Dynamic object creation
Dynamic object creation -- W/RESERVATIONS

 - Having trouble pickling new objects, so site_test.py fails (pickles game dictionary for DB storage)
 - Dresser.objects is somehow a class attribute instead of an instance attribute, so:
   dresser.objects.append('chair')
   dresser = Dresser()
   dresser.objects -> prints ['chair']
 - As a result, several tests in object_test fail
Fix dynamic creation of Dresser class

 - Problem was that an empty list was being passed in as a default argument, and Python treated it like an object instead of a plain empty list
WEIRD STUFF with serialisation & game dict = class
Game as class, serialisation, equality

 - Game is now a class instead of a dictionary (game.game still equals a dictionary)
 - Added serialisation and deserialisation to objects, rooms, and game
   - Saves changeable aspects of game (e.g. object.is_lit vs. object.name)
   - TODO does not support objects within objects (containers)
 - Added equality operators to objects, rooms, and game, so that can test whether two game instances are the same or not (for testing)
   - TODO does not support objects within objects
Updated tests, clean-up