Refactor password type to support multiple hashing algorithms and implement argon2

Pardon the thread necromancy, but I would like to see this change.