Teacher events module management web interface.

Altered the existing teacher events module to be able to add and remove teacher training and interview timeslots. The name and friendly name are set automatically with a nice date format.
Added the option to morph into a volunteer
(cherry picked from commit db9c447bb6e67b1cb469be95d4f97109609e2828)
Initial commit of survey export.

Exports a dump of survey data from a given program in Excel (2003)
format.  (Note: LibreOffice will read the file, but will take a while to
do it, and will mangle the timestamps.)  The reason for Excel 2003 is
that it's easy to write via templates since it's just XML.  If this
seems like a problem, I can consider modifying it to use a package to
write say XLSX.  CSV isn't really an option since we want to have
multiple tabs, for teach/learn and program/per-class.

Doesn't do the per-class questions yet.
Add per-class and cleanup to survey dump

Add support for per-class questions, and clean up a bunch of things.
Also make the performance a little bit less terrible, hopefully.
A few small fixes to survey export
Makes meets_deadline errors more useful.

Adds something to tell you the program module and the bit that caused
the deadline error.  Also makes the teach and learn deadline pages more
similar and hopefully a bit more understandable to users.  Fixes #279.
Fix #529 -- make "Back to Page View" link bypass browser cache after editing a QSD page
Rewrite survey dump to use xlwt and be more efficient.

I'm pretty sure this version actually does all the database stuff right!
Famous last words....
Moved the add form to the top of the page.
Teacher event nodes use integers and event type is properly set now.

This is in the teacher events module.
Removes MIT-specific language in deadline errors.
Merge pull request #538 from benjaminjkraft/issue279

Makes meets_deadline errors more useful.
Merge pull request #542 from learning-unlimited/lua-issue-529

Fix #529 -- make "Back to Page View" link bypass browser cache after edi...
Merge pull request #537 from benjaminjkraft/issue383

Dump survey data into spreasheet
Merge pull request #521 from uakfdotb/issue27

Teacher events module management web interface.
Merge branch 'main' into volunteer_morph
Replace tabs with spaces in adminmorph.py
Merge pull request #526 from learning-unlimited/volunteer_morph

Added the option to morph into a volunteer