Fix typo in program setup for onsite bit
Filter out unscheduled classes from teacher schedules
Switch teacher check-in to @needs_onsite
Adjust lottery assignment ordering of sections

This change was suggested by Stanford.  With the sections in completely
random order, the longer classes (e.g. 3--4 hr) tend to get much fewer
students because the students that applied to them have already been
assigned conflicting classes.  This change assigns groups of sections
based on their duration in descending order to reduce the frequency of
this problem.
Add display_stats function to lottery code

This is another local change from Stanford.  It merely prints out some of
the stats as they are computed, for convenience.
Stop assuming people were born in 1994 (if using login by bday)

This is a local change from Chicago, and the problem only affected Chicago
because they were the only ones linking to the login by birthday feature.
If you have logged in by birthday and you go to the student profile page,
the code was using the saved month/day from your login and assuming a year
of 1994.  This worked reasonably well (at least in 2008).  However, it's
completely wrong.

We discovered this problem when an unlucky student entered 2/29/1996 (a
valid date during a leap year) on their profile and then proceeded to log
in by birthday and edit their profile again.

Now we seed the DOB field with the previous value.  If none is available,
we will guess 1998 for the time being.
Add option to ajax_sections view to filter out rejected sections

For Ajax scheduling it's desired to fetch a list of all sections that you
actually want to schedule, e.g. those that are accepted and belong to an
accepted subject.  Usually we perform that filtering in the client side.
Now that behavior can be obtained by passing a GET parameter
"accepted_only": /manage/[program]/[instance]/ajax_sections?accepted_only