Added Doors that represent function calls

Holy shit this is hard.

Room and RoomLayout have been heavily modified to better delegate tasks.

-RoomLayout is expected to have an items array of "template items." They
are just there to indicate that a certain type of object should be
instantiated when the room finally gets generated.

-Room is now responsible for the actual instantiation because the Room
needs to find space for the instantiated things.
-Room also instantiates parameter buckets for function call doors
-TODO: the methods for finding space to instantiate doors and other
objects are not yet implemented

-TODO: Doors will be responsible for calling the generateRoom method
when they have the necessary arguments.