Ranking bugfixes.

Positioning :up did not work (because find_previous_two did not work) when the rank had a scope which sets an ORDER. This caused finder(:desc) not to have any effect as it was a secondary order. Fix uses reorder instead of order in finder.

In certain situations (objects with ranks all grouped together at the MAX_RANK_VALUE) moving the third object from the bottom :down would cause it to move 2 spaces down, to the bottom (its rank would equal MAX_RANK_VALUE when it actually wanted to be one lower, it was set to one above where it should be expecting to have everything less than it moved down and then itself moved down 1 (in rearrange_ranks) but then its value is MAX_RANK_VALUE so it gets treated slightly differently). This fix has 3 parts, removing the if check which catches rank == MAX_RANK_VALUE (it's almost duplicated code from the "rank > current_first.rank" part), doing the "update_all rank - 1" if rank is >= current_first.rank (to stop unnecessary rebalance_ranks from at least one corner case) and ensuring that the rank is incremented when we know that the rank is being set exactly (when it has no previous value, or if it has both MAX_RANK_VALUE and wasn't pushed :up or :down).