Password Generation Library

(I'm mostly creating this PR so Travis will run the tests. Cough.)

Features:
* Generate a random password

Other changes made by this PR:
* Added test cases
Are you sure about `=== ''` here? Can it ever be an empty string? I'd switch it to `empty($rules)`.