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.
Simplify ModerationManager.post_save_handler.

Restructure the code to reduce nesting and improve readability.
Add a test for admin automoderate() undoing our changes to moderated objects.
Hide rejected objects if never approved.

The old behaviour is that rejected objects will always be displayed in
querysets, which is weird.

In my view, if an object has never been approved, it should be hidden. If
it has been approved, but a change to it is rejected, then the change should
be reverted and the object should continue to be visible, as it was when it
was approved.

This patch implements that behaviour by using the undocumented
moderation_state column to put objects that have never been approved into
DRAFT state, which hides them from the public but allows the admin to see
them. Once an object has been approved once, its state becomes READY, and
rejections don't change it back to DRAFT, they simply undo the changes.

Note that this changes the behaviour of the moderation_state field slightly.
In particular, the admin will be invited to moderate objects in DRAFT state,
which previously they were not.
Merge branch 'master' into aptivate_new
Merge branch 'improve_multiple_mods_handling' into aptivate_new

Conflicts:
	moderation/managers.py
Merge branch 'test_admin_automoderate_preserves_changes' into aptivate_new

Conflicts:
	tests/tests/regression/__init__.py
Merge branch 'moderation_drafts_pr' into aptivate_new

Conflicts:
	tests/tests/unit/models.py