Program module tweaks

Change individual program modules to be proxy classes instead of
abstract base classes. (Abstract base classes are for inheriting from;
proxy classes are for extending Python behavior. Program modules want
the latter.)

Change module extensions to be specified using a classmethod, rather
than by inheritance. This is because proxies aren't allowed to inherit
from multiple model classes.
Tweaks to the program module tweaks

Change behavior of ProgramModuleObj.fixExtensions(): rather than
update the instance dict with all of the module extension attributes,
just add one attribute which points to the module extension itself.

Also, make extensions() return a dict: key -> ext_class rather than a
list of ext_class. The key will be used to name the attribute that
points to the module extension.

This will break existing code that tries to access module extension
attributes directly as module attributes.
Add __getattr__ method for backward compatibility

If code tries to access attributes of a module_ext directly as
attributes of the module, let it work but raise a DeprecationWarning.
Fix code accessing module_ext attributes directly from modules

Bring existing code into compliance with the change in 3afe965b.
Rename inaccurate variable name teacherclsmodule

(and fix inaccurate comment)
Update esp.wsgi to use django.core.wsgi public API

Resolves #1242.
Handle non-ascii characters in Mailman list members

Fix #872.

We use ('ascii', 'replace') rather than, say, utf-8, because it looks
like Mailman might not reliably accept utf-8, and it's not a big deal
if we lose some characters in names anyway.

(cherry picked from commit 8b4803ffc963c4b62519c4dd3b1d356932f903c3)
Use protocol-relative URL to load CDN scripts in custom forms
Use iso-8859-1 encoding instead of ascii

See explanation in comment.
Remove str() call in remove_list_member
Merge pull request #1249 from learning-unlimited/wsgi-transition

Update esp.wsgi to use django.core.wsgi public API
Merge pull request #1259 from learning-unlimited/issue-872-mailman

Handle non-ascii characters in Mailman list members
Remove django.extensions.tests from INSTALLED_APPS
Exclude django_extensions from tests
Cosmetic change to dashboard: make teacher names more readable
Merge pull request #1267 from learning-unlimited/remove-django-extensions-tests

Remove django.extensions.tests from INSTALLED_APPS
Merge pull request #1232 from learning-unlimited/lua-program-modules

Program module tweaks
Merge pull request #1268 from learning-unlimited/dashboard-teachers-cosmetic

Cosmetic change to dashboard: make teacher names more readable
Merge pull request #1261 from learning-unlimited/issue-1210

Use protocol-relative URL to load CDN scripts in custom forms
Fix nodejs link in packages_base_manual_install

Fixes Travis tests.