Allocate memory up to the currently configured max_length, not up to the
(possibly larger) charset file's header->length.
Don't store/restore the counts array, but instead infer its contents by
processing the order just like we do during actual cracking.  This change is
needed to speedup fix_state() and to reduce the .rec file size, which is
desirable for reliability.
Copy the entry number and the current length into global variables just before
inc_key_loop(), and use them for writing the .rec file.  This assumes that
while we're in the cracking loop, save_state() may only be called via code
paths from inc_key_loop() (via cracker.c functions).  The rationale behind this
change is to speedup fix_state() (so that it does not need to copy the entry
number) and to reduce the .rec file size (by storing indices only up to the
current length rather than up to the maximum length).
Use "unsigned char" rather than "int" for numbers and rec_numbers array
elements.  This speeds up fix_state() while keeping the code in inc_key_loop()
at least as fast in testing on x86-64.  (There may be a performance regression
on CPUs with no byte loads/stores, like the original pre-BWX Alpha, but we
mostly care about what's currently common.)
Assorted changes to reduce the impact of increased/excessive CHARSET_SIZE on
length switching speed and on memory usage (memory for the full CHARSET_SIZE is
allocated anyway, but only portions needed for the actual characters seen are
written to).
Improved the detection and handling of the "Unstable order" condition.
Expanded the CHARSET_* defaults to the full 8-bit range (except for NUL) and
lengths up to 24.