Fix bug 931156: ensure breadcrumbs update during page move.

This does some significant refactoring, but not really changing, of
the page-moving code, breaking up the monolithic _move_tree() into
multiple shorter methods which each handle a smaller piece of the
puzzle (for easier debugging/editing).

The only genuine change is that Document.save() no longer attempts to
create redirects when a slug is edited; the redirect logic is now
called during page move, and the move() method, which existed only to
do that, is removed. This is considered safe because the only way to
edit a slug outside of page-move is through the Django admin, and this
commit also removes that ability, along with any tests that tried to
exercise the automatic redirects on non-move slug edits.