libcdecl: Replace yytname array in the Bison parser.
Bison generates a list of symbol names as a static array of char pointers
initialized with string literals, which is simply horrible. These pointers
are two to four times larger than necessary, but with position-independent
code this also forces them into an unshareable, writeable segment since
they are not compile-time constants and must be initialized by the dynamic
loader at runtime.
Furthermore, the names of nonterminal symbols are always included but they
are not always needed; they should only be output by tracing code which
is disabled by default at compile time.
Fix this by adding a new build script which postprocesses the output,
replacing the yytname array with a function implementing the same lookup
with truly constant tables. Inclusion of nonterminals is now conditional
on YYDEBUG.
This is a big win, reducing the overall library size about 5 to 10 percent
(64-bit hosts see the most improvement).