Add a new column to the persons model to keep track of rank.
Add failing test for cached ranking.
Isolate those tests a little more.
Add a __repr__ to make debugging tests easier.
Recalculate and cache rank each time a new assertion is awarded.
Expose a Person's rank in __json__.
Accept a notification callback and invoke it when rank changes.
Remove spurious backslash.
Simplify that adjust_ranks call.
Add a test for pre-existing users with no cached rank.
Additionally, send the badge award message too.  Because that just makes sense.
Introduce timelimits to the leaderboard maker.

This code and test will end up powering these two features:

- fedora-infra/tahrir#163
- fedora-infra/tahrir#174
Change that fedmsg topic from "update" to "advance" (since it will always be advancing, and we never emit messages for rank slipping).
Add a comment on the meaning of the 'start' and 'stop' parameters.
Add a docstring for _adjust_ranks.
Explicitly label the sq.func('count') interface.
Nuke unicode_literals.
Make ranking-tie test a little more forgiving since database ordering is undefined.
Add a note to the comment about null rank.
assert_in fails on py2.6, so roll our own.