Move shuffling; by-far the slowest part of PHF generation.

What a silly addition!
Optimise the search by avoiding hashtables and hashing.

This uses a "generation-vector" to check if things exist. It takes the
time for -l 6 from 0.5-0.6s to 0.25-0.35 and -l 7 from 3.0-3.3 to
1.9-2.2.
Store the PHF table as chars, not u32s.

Avoids all unsafe code.
Down with `unsafe`! Up with docs!