Handle ranking before validation

This fixes the breaking spec in #68

After I changed to `before_validation`, a bunch of specs failed. They failed only because they were using `update_attribute`, which skips validation. I replaced all uses of `update_attribute` with `update_attributes` and all tests pass again.

I think it's a little odd that setting the position is coupled with running validations. I'm not sure how to resolve that without doing ugly stuff like overriding save...