math/mptext.c: Radically refactor `mp_read'.
It used to be the largest function in the library -- possibly in my
codebase.
* Split it into three main pieces: the special-purpose binary reader,
an efficient stack-based general-radix reader, and a high-level
syntax parser which picks out signs and base indicators. This
removes the complicated entangling of the base indicator parsing
with the general-radix reader which was the worst feature of the old
version.
* Split commonly-used functionality out into separate functions,
notably `char_digit' and `read_digit'.
The result is code which is easier to understand and actually shorter.