Update check availability module to use autocomplete.
Some fixes to previous commit.

Fix edit availability page submit. Fix link back to check availability page.
Fix #776: QuerySet.prefetch_related broken

Fixes a bug in cache_loader where trying to access a many-to-many
field descriptor of a model class (e.g. ClassSection.meeting_times)
threw an error, which confuses prefetch_related. This was happening
because the cache_loader overrides the __get__ methods on these
descriptors to provide extra attributes, but the overriden methods
assumed you were trying to access the field from the instance to get a
ManyRelatedManager, rather than trying to access the field descriptor
from the class.
Fix #774: Remove unnecessary queries in ProgramModuleObj.findModuleObject

Removes a for-loop that makes a bunch of queries that are supposed to
"make sure all modules exist" but isn't actually needed because
prog.getModuleViews (which is better-cached) does this already.
Fix teachers who like running check.

It called datetime.timedelta.seconds rather than
datetime.timedelta.total_seconds(), so classes scheduled a day and a bit
apart were showing up.
Customize the CSRF failure page.

Uses the CSRF_FAILURE_VIEW setting to specify a custom view for
rendering the CSRF failure page.

The old failure page was ugly and confusing because it didn't use the
same theme of the website. The custom view uses a template that inherits
from main.html, so theming is maintained even when a CSRF error occurs.

The new template also includes important debugging information that a
user can copy-and-paste into an e-mail to us.
Adds mechanisms for disabling the debug toolbar

The Django debug toolbar can now be permanently disabled for a dev
server by setting DEBUG_TOOLBAR=False in local_settings.py, or
temporarily disabled with debug_toolbar=f in the request query string.
Fixes persistence of debug toolbar preference

The code for keeping the debug_toolbar GET parameter across page
navigations wasn't working, and probably isn't possible.

Changes the code so that the state is stored in request.session.
Allow QSD.name to be blank

After schema simplification, QSD doesn't use the name field anymore, and most (all?) QSD objects have a blank value for it. This is fine, except that the admin panel complains whenever you try to save a QSD object with a blank name. Thus, make the field blank-able.
Merge pull request #779 from learning-unlimited/module-views-fewer-queries

Fix #774: Remove unnecessary queries in ProgramModuleObj.findModuleObject
Merge pull request #778 from learning-unlimited/fix-prefetch-related

Fix #776: QuerySet.prefetch_related broken
Merge pull request #782 from benjaminjkraft/scheduling-checks-fixes

Fix teachers who like running check.
Merge branch 'main' into csrf-failure-view
Merge pull request #788 from learning-unlimited/debug-toolbar

Debug toolbar
Merge pull request #789 from learning-unlimited/qsd-allow-blank-name

Allow QSD.name to be blank
Move CSRF failure view from middleware to web/views
Merge pull request #785 from learning-unlimited/csrf-failure-view

Customize the CSRF failure page.
Fixes hardcoded esp-webmasters
Fix @meets_deadline.

Makes @meets_deadline and friends check that a permission is valid
(unexpired) before using it.  Note: the line of code this edits should
arguably be removed entirely, but that may require some discussion.
Adds PQF.set_Q() method