We can't reliably filter the membership list, because we don't know who has
paid the MathSOC fee. Better to leave MathSOC to do this. In the case that they
to not verify the list then mathsoclist puts us at a disadvantage, as other
clubs likely do not filter their lists.
The only difference between a club representative account and a member account
is how they are registered for terms. If you are already a representative for
the current term, you need only go through the membership renewal process to
become a full fledged member.
This really only moves two functions: create_member and
create_club. Nothing else is left in accounts. Eventually,
it might make sense to separate it out again in a more
sane way (e.g. they should share the connection somehow).
Updates in this version:
* Tests added to most Python modules.
* Split configuration files.
* Added maintainer scripts to manage permissions during install and purge.
* Added functions for use by tools planned for next release (chfn, etc).
* Added support for account "repair", which will recreate LDAP entries
and Kerberos principals if necessary.
* The recreate account menu option is now active.
* Replaced instances of "== None" and "!= None" with "is None" and
"is not None", respectively (thanks to: Nick Guenther).
* Renamed terms.valid() to terms.validate() (thanks to: Nick Guenther).
The changes in most files between 0.1 and 0.2 are so large that git is unable
to automatically detect the renames that took place. This commit moves files
into their new locations so that the history is accurate.