Separate reset generation from mailer

This is more of a proof-of-concept, but doesn't seem to break any specs. It separates generating a password reset from the action of sending an email. Aside from separating concerns, I think it's a win in a few other cases as well (e.g. can just generate the reset for purposes of a unit test).