Merge in Zach's branch (with oodles and oodles of bug fixes)

This branch replaces "schedule" with "schedule_chain" which contains a list of ordered schedule items---hence a given "route" now entails at least one pickup and at least one drop, but potentially more pickups and drops. The initial work was done by a student named Zach who made a mess of the code. I've fixed it up quite a bit, but there may still be some bugs lurking. Nevertheless I think it's stable enough to go live with. ABSOLUTELY BACK UP EVERYTHING before updating.