ENH: add method='dense' to rank

This adds a `method='dense'` option to `rank` which does the same thing as the one in `scipy.stats.rankdata`: the first ranked group gets 1, the second 2, etc.  Basically it ports the approach used in `scipy.stats._rankdata_fused` to the pandas rankdata implementation.

It also adds a few tests that the various methods do what they're supposed to, which I couldn't find a test for before.