Simplify ModerationManager.post_save_handler.

Restructure the code to reduce nesting and improve readability.
Simplify ModeratedObject._moderate method.

The original method was very unclear about what it was doing, and also
saved the base object more often than was necessary. I added a lot of comments
to explain what's happening, and restructured the code so that the variables
and the reasons for following certain branches are clearer and the code is
more readable in my view.

I also avoid calling self.changed_object.save(), and call save_base(raw=True)
instead to avoid triggering the pre_save and post_save hooks again.
Refactor model tests to reduce duplicated code.

Most of the tests for custom user models were just copied and pasted from
standard user models, with minor changes. Now all tests are shared between
both. There shouldn't be any important difference in what's actually tested.
Don't save ModeratedObject twice in automoderate().

approve() and reject() save the ModeratedObject anyway, so we don't need to
save it a second time.
Merge pull request #115 from aptivate/optimise_saving_moderated_object

Don't save ModeratedObject twice in automoderate().
Merge pull request #114 from aptivate/simplify_moderatedobject_moderate

Simplify ModeratedObject._moderate method.
Merge pull request #113 from aptivate/simplify_post_save_handler

Simplify ModerationManager.post_save_handler.
Merge pull request #119 from aptivate/dry_out_models_tests

Refactor model tests to reduce duplicated code.
Throw an exception if there's multiple moderations for the same object.

There's no sensible default behaviour, so you'll need to override
filter_moderated_objects to define what bevahiour you want. What if one
moderation approves an object, and the other rejects it? What if one is
still pending?

Either way, the old code simply picked one moderation at random, and that's
just broken.