Use reversion to handle QSD.

This means that rather than creating a new QSD instance each time a model object is updated, they will be handled by django-reversion and will be visible in the history from the admin area.

This commit also makes QSD instances searchable by the URL from the admin area, because this functionality is useful now.
Add migration for QSD reversion to call createinitialreversions.
Use load_cur_user_time to correctly set current date on edit.
Alter migration to automatically create reversions.

Currently this does not set the date time of the reversion itself, although it does set the date_time attribute in the QuasiStaticData instance which is also versioned. Since the reversion's date time is the one displayed in the admin panel, optimally this would be set by the migration.
Some fixes to the QSD reversion migration.
Fix backwards migration.
Adds sibling_discount Tag & optimizes accounting

Optimizes the accounting controller by caching the sibling_discount
amount, and by caching the list of students that have sibling discounts.

Further optimizes the controller by skipping all calls to
execute_sibling_discount() if there is no sibling discount.
Optimizes accounting by avoiding subqueries
Limits accounting to registered students

Optimizes the accounting modules by limiting searches to students who
are registered for the program, rather than all students who have a
Transfer for that program.

In theory this should not change anything, but there exists some bug
that is creating Transfer objects for all users. This bug was crippling
the accounting module before this commit.
Moves memoized accounting properties to Program

The memoized properties weren't being very helpful in the accounting
controller, because they still needed to be computed once per
IndividualAccountingController. By moving these properties to the
Program model, these properties will only need to be computed once per
request.
Adds sibling discount to program creation

Also makes some fixes to the program creation form template, and adds a
sibling discount setter to Program.
Avoid duplicating executed transfers

The accounting controller has a function add_required_transfers() which
essentially initializes a student's financials for a program, by creating
transfers from "accounts receivable" to the program for any required line
item types.  The transfers are deleted and re-created to ensure that they
have up-to-date line items, e.g. if the costs of the program are changed.

If this function is called for a student whose transfers have
been executed, either by submitting a payment or via an administrative
action, then more transfers would be created.  This change should avoid
the problem by not creating any new transfers for line item types that
have already-executed transfers associated with them.
Clarify credit card view template
Fix bug in IndividualAccountingController.amount_siblingdiscount()

The Program.splashinfo_objects property has user IDs as keys and booleans
(e.g. only True) as values.  The accounting controller should thus check
for the presence of the current student's ID in that dictionary, rather
than the ESPUser object representing the student.
Ensure that sibling_discount is always a Decimal
Merge pull request #717 from learning-unlimited/accounting-optimizations

Accounting optimizations
Add reversion dependency in qsd reversion migration

This is needed to run the test suite.  (The django-reversion app itself
uses South migrations for its tables.)
Fixes TeacherEventSignupForm errors
Merge branch 'main' of github.com:learning-unlimited/ESP-Website into main
Fixes teacher event signup failing to clean correctly