UCD.pm: Remove reliance on UnicodeData.txt
In doing so, there were a number of bug fixes made, as it now relies
on files processed by mktables, which has intelligence to fix a
number of problems with UnicodeData.txt.
This is essentially a rewrite of charinfo(). It previously had
hard-coded the ranges in UnicodeData.txt, instead of examining the file
to see what was there. This had not been updated for some time, and was
out-of-date, with the result that the newer ranges (all CJK) were quite
wrong. The new code does not have such reliance, and so new versions
of Unicode should not break this, like they previously would
This may be slower than what was previously there, as it reads several
smaller files instead of one very large one. But the principal reason
to do this work was to save disk space. It was previously thought that
the function could continue to use UnicodeData.txt if it exists on the
machine, but this would have required fixing all the bugs that this
automatically fixes by using the processed files.