Split payment models into abstract and concrete versions

Hattip to @BuddhaOhneHals for doing this in the first place.
Unfortunately, I couldn't (be bothered to) merge the original commit as
the merge conflicts were too painful to resolve - simpler to just
reapply the same change myself.

Fixes #466
Change balance into a property

This makes more sense than keeping it as a method.
Reorganise payment tests
Bump South and python-memcached versions
Upgrade nose, nose-progressive, spec

We're now using nose 1.3
Move assert function to module level for generator tests

This is required for multiprocess testing to work (eg ./runtests.py
--processes=2)
Use nose test generators instead of @dataProviders
Default to --processes=4 when running tests.

Test suite time has halved.