Improve password generation performance.

Improvements:
- random io reads are minimized
- random range is minimized, based on charset cardinality
- for each Generate() call, a charset table is built, making byte checking an
  O(1) operation.

Added a hex generator for performance comparison (hex alphabet never needs to
discard random bytes since it's base16).