refactored crypto/password.js and added verifierVersion config parameter

Slightly better password implementation plus the ability to have multiple stretching versions.

I added a version 0 to speed up dev tests that doesn't use scrypt. It saves about 5 seconds on the test suite.

The diff looks horrible, but the changes outside of `crypto/password.js` are pretty straightforward.