Update the TODO list in the README
Switch to a PopIt-Python with API key support
Support using a PopIt API key as well as the old-style login
Don't error if there are no memberships

I think this might be a change in behaviour of PopIt - that the
memberships property of a response is missed out completely if there are
no memberships?  In any case, this fix seems to be needed to cope when
no memberships property is returned on a person or organization.
Change get_person_data_from_form to take dict, not a form

We would like to reuse this in the new functions for updating a person's
details.
Consolidate the party_name canonicalizing into get_party()
Move some useful functions from views.py into models.py
Factor out create_membership and add option start / end dates
Generalize get_2015_candidate_list_memberships
Only define the candidates list name regex once
Factor out code for creating PopIt objects, retrying new IDs

If an ID (slug, essentially) is already taken, you need to retry with a
different slug - this factors out that logic so it can be more easily
reused.
Add a helper method to extract the Area ID from a MapIt URL
Move update_values_in_sub_array into models.py
In the person form, explain that 'Party' means 'Party in 2015'
Switch to an intermediate representation of a person (inc. memberships)

The motivation for this is partly that we want a simple representation
of everything we know about a person to put in the 'versions' array of a
person's PopIt record to enable easily reverting to that.

The representation we're now using is described in the comments at the
top of update.py.  That file also provides mixins for:

 - Taking that representation of a person, and updating a PopIt instance
   to match (PersonUpdateMixin) and
 - Fetching a person and their memberships from PopIt and turning it
   into that representation (PersonParseMixin)

This commit also rewrites the views that update data in PopIt to use
this representation.  (The constituency page view is still to be
updated, but should use PersonParseMixin in the future, in particular so
that it's easy to classify people into "known not to be standing again"
and "no known not to be standing again".)
Don't get all organization members when iterating over memberships

The number of members of political parties can be huge, and you don't
need that when you're iterating over the memberships of a particular
person.
Add a couple of things-to-do to the README
Debugging for the missing memberships bug
Add a script for reproducing the 'missing memberships' bug
Store all versions of a person, with attribution for each change

After this commit, new versions are at least stored in PopIt, although
the previous versions aren't presented in the interface yet and there's
no option to rollback yet.