Implemented framework for coincident segments

Each course will have a dictionary of segments that take place at the
same time and will compute schedules with those instead, then letting
the user pick which segment they want based on their own choices or
availability.  Validity checking at new leaves was added to catch any
bad schedules that got through.