Improved Maze Generation

* Changed MazeDesigner to check the door capacity of each section after
doorways have been pruned. That way we check against the true door
capacity of each section rather than underestimating it. The result
should be an increase in the average number of sections.
* Changed the range of inclusion distances for rooms to 2 to 3. The
previous range was 2 to 4. The range was reduced because most of the
time we would end up with one huge section that contained most of the
rooms.
* Added getRandomItemIndex() to WeightedRandom.
* Changed SectionData to keep a list of all rooms in a section so that
removing the whole section is simple. Also implemented IWeightedItem
with the weight being the section's capacity.
* Changed createMazeLinks() to use WeightedRandom to select which
sections will have doors. This is to prevent small sections from
receiving as many doors as large sections, which ends up looking
cluttered and strange.