Ensure that we move in the correct direction for "next", "prev"

This is really quite a bit of a hack.  Essentially what happens is
that some call to fix up the current-message pointer actually ends up
breaking because now "next" can go backwards.

I think maybe this needs some re-design in the database layer...