Modifications to the mailer cron script.

The script will no longer halt on exceptions. Instead, it will send the exceptions to the sender address and the configured bounce address. It will attempt to retry sending to recipients who it failed to deliver to the first time (this only happens the next time the cron script is executed).
Updates server_setup scripts to use packages_*.txt
Removes Dropbox install
In server_setup, adds espsettings line for prod
Save theme mtimes; parameterize copyright year
Adds prev_theme_customization getter/setter
Moves misplaced <div> tag
Adds theme recompile view

Adds a view and associated ThemeController method that recompiles the
current theme. It reloads the theme (possibly updating the template
overrides with recent code changes), then recompiles the customizations.
Fixes various bugs with user types code

Partially resolves Github issue #646. Changes
Program.setup_user_filters() to be a classmethod, and calls it at class
definition time. This should eliminate any caching bugs that would cause
Program.students(), etc. to be undefined after retrieving a Program
directly from the cache.

Defines the classmethod ESPUser.create_membership_methods(), and calls
it from ESPUser.__init__() rather than having the code directly included
in __init__(). Unfortunately, this method cannot be called at class
definition time in order to resolve #646; see the commit message for
commit 2874259dbcc3 for the reason why. But now that this method exists,
it can be called at cache retrieval time if necessary, though this
commit does not do that.

Adds optional parameter use_tag to ESPUser.getAllUserTypes() and
ESPUser.getTypes(). It defaults to True, but when it is False, the
user_types Tag is ignored and the default user types are always
returned.

Extends ESPUser.create_membership_methods() to make sure that all of the
default user types have membership methods defined, because some (such
as isStudent()) are used in the code even if that user type isn't
included in the Tag override. It starts by defining all the membership
methods for the default types as returning False, and then overwrites
them as necessary. This fixes a bug in the splashcon.learningu.org
website, where no pages could be loaded because ESPAuthMiddleware always
calls ESPUser.getGrade(), which always calls ESPUser.isStudent(); but
splashcon.learningu.org did not have the Student user type defined in
its user_types Tag.
Adds esp.wsgi to repository

Previously, esp.wsgi was always constructed by the setup script. But all
of them should, in theory, be the same, except for the $BASEDIR and the
USE_PROFILER variable. But the base directory can be determined by
python at runtime, and the USE_PROFILER variable can be made into a
Django setting. This commit makes both of these changes, and removes the
creation of esp.wsgi from the setup scripts.
Adds LESS stylesheet to be included by all themes

Overrides Bootstrap styles, or otherwises sets global (to all themes)
styles.

In this particular case, overrides a Bootstrap style that was causing
radio and checkbox labels to appear a line below the input buttons,
rather than inline. This was effecting the rendering of the commpanel
and a few other pages.
Changes theme name comment

Changes the theme name comment to be a Django template comment at the
bottom of the main.html template.

The theme name cannot be HTML-commented at the top of the main.html
template, because the XML/HTML declarations must be at the top of the
rendered HTML file. It cannot be HTML-commented at the bottom, because
this is outside all template blocks. And it cannot be Django
template-commented at the top, because {% extends elements/html %} must
be the first template tag.
Changes encoding to caps
Moves qsd media includes to elements/html

Now the QSD scripts and stylesheets will be loaded once on all pages.

CSS stylesheets should not be linked outside of the HTML head, and it is
unnecessary to include Javascript files more than once (which could
happen on pages with multiple inline QSDs). Furthermore, it is
negligibly more expensive to load the QSD media files on the few pages
that do not use QSD.
Adds required type attribute to all script tags

Also removes the deprecated language attribute.
Fixes HTML validation for tab_admin

id="tab_admin" is defined more than once, and is not used in any CSS or
JS. So this commit removes both definitions.

<div> tags are not allowed as children of <ul> tags. Moves the .admin,
.unmorph, and .hidden classes to their respective <li> tags, and removes
the enclosing <div> tags. This should cause no change in appearance or
functionality.
Conditionally renders web/navbar_left.html

If there are no navbar entries, web/navbar_left.html used to render as
an empty <ul> tag. This does not validate properly. This commit adds an
encloding Django template if block, and does not render the template if
navbar_list.entries has no elements.
Updates comment
Re-add part of formstack module
Use relative URLs in credit card redirect