Add lottery frontend program module.

As the name implies, this serves as a frontend to the lottery registration assignment class. Currently it only allows configuration of parameters, running the lottery, and saving the results (or clearing previously saved results).
Lottery front end module: refactor code to use helper function.
Update link title for lottery frontend module.
Update lottery frontend module title text in template pages.
Improvements to lottery frontend interface.

On server error, a message will now be displayed notifying that an error code was returned. The lottery buttons have extra style. Help text is included for the lottery assignment options.
Merge remote-tracking branch 'origin/main' into issue803

Conflicts:
	esp/esp/program/controllers/lottery.py
Fix spacing in lottery assignment controller.
Attempt to fix lottery error with fill_low_priorities
Compress lottery data before sending to client.
Merge branch 'issue803' of github.com:learning-unlimited/ESP-Website into issue803
Lottery frontend: add an error page if lottery module isn't there
Lottery controller: Add specific exceptions for invalid section IDs.

Some errors we encounter in the lottery are the result of errors in our
code and we want admins to contact us if they encounter them.  However,
some errors are not really the fault of the code and can be addressed by
admins.  For example, they may have cancelled a class after students
signed up for it.  We don't want to ignore those registrations silently
and go ahead running the lottery, but we also don't want confusion every
time this happens.

This commit adds a LotteryException class which can be used within the
lottery controller for this sort of problem, and uses it for the most
common case encountered so far (preferences for sections that don't
"exist").
Lottery frontend: report detail of exceptions when they happen
Lottery frontend: use base64 encoding for compressed data

We were getting Unicode errors encoding the zlib-compressed data string.
Base64 encoding avoids this problem although there is some overhead
(33%?).
Merge remote-tracking branch 'origin/issue803' into mit-prod