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
Might as well change this (and the similar ones below) to:

    empty($rules['lower']) OR $keyspace .= 'abcdefghijklmnopqrstuvwxyz';

... and then you can remove the checks between lines 85 and 97 altogether.