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
null=True is only useful for a few edge cases where one wants to
separate between '' and None. If null=True was found, it was removed.
If blank=True was not set already, it was set instead. If default=None
was set, it was removed (defaulting to '').
I then grepped the source code for tests 'is None' and 'is not None',
and checked the instances where default=None was set.
Fixes #584