Room.connected includes adjancency and uniquness

Extracted similar logic from DungeonMap.validRoom
Room.legal detects broken connections
Rooms are legal if they are not adjacent
Room.connected returns false for broken connections
Removed references to InvalidRoomConnection
Move field when cursor or player goes off it
Rooms can be constructed with random exits