Add locking semantics to article modification.

This is just a first step. I'm not sure how we'll test this with
confidence apart from simply scanning the code carefully to check for
likely race conditions.

There are still a few checks that must be done after a lock is
acquired. For example, if you load a post to update and another client
acquired a lock and deleted the post, once the lock is acquired for
updating the post must be re-validated.