Add WordPoints_Rank::get_previous()

Retrieves the previous rank in a rank’s group.

See #154
PHPUnit: remove excess code from the mock rank

See #154
PHPUnit: clear up properly after each ranks test

See #154
Decrease user ranks in addition to increasing

We rename `WordPoints_Rank_Type::maybe_transition_user_rank()` to
`::maybe_transition_user_ranks()`, because it transitions the ranks of
this type of this user in all groups.

We also split some of the logic out of that function, into two methods
which check about increasing and decreasing the user’s rank,
respectively. These functions don’t actually perform the transitions;
that’s still done by the main function. All they do is check if the
user’s rank should be increased or decreased, respectively.

In addition to implementing automatic rank decreasing, the changes also
make it so that multi-rank transitions are performed at once. Now if a
user can hold a rank 3 levels above their current rank, they will be
transitioned to it, instead of just to the next rank. The reverse also
applies to decreasing ranks.

The arguments of `::maybe_transition_user_ranks()` were changed in
addition to its name. The second argument is now a boolean to tell it
whether the rank should maybe be increased (`true`) or decreased
(`false`). The `$args` argument is therefore the third argument, and is
now optional.

See #154
Update the points rank type for decreasing ranks

We no longer use the `$args` to pass any arguments through `maybe()` to
`can()`, and instead avoid calling `maybe()` if the wrong points type
is detected by `hook()`. We do still leave the sanity check in `can()`,
but we check against the default value of the `points_type` meta field
instead.

Includes unit tests.

Fixes #154
Remove an excess newline

See #154
Reduce redundancy by combining next() & previous()

Replaces `WordPoints_Rank::get_next()` and
`WordPoints_Rank::get_previous()` with
`WordPoints_Rank::get_adjacent()`.

See #154
Merge branch 'issue-154'