For example, "2 *-1 + 100" now evaluates to 98, not 194.
The core of the bug is that the parenthesizer rewrote "-X" as "0 - X", which would then
be parsed as normal, with any following infix operators being applied. So the expression
"2 *-1 + 100" would be parenthesized as (2 * (0 - 1 + 100)) instead of ((2 * -1) + 100).
Fixing this required more changes than I had hoped for. In the end, I found the "0 - X"
rewrite to be inherently faulty. A special case is still necessary because "-" is, by default,
classified as an infix operator and the rest of the code assumes that infix operators are
infix and have a higher binding priority than normal procedures.
The new logic has two special cases for this rewrite, same as the old logic. However, the
new code localizes both to paren.cpp instead of implementing the same idea in both the
runparser and the parenthesizer. It's cleaner to put this in paren.cpp because the runparser
treats the word as a list of tokens and it's not possible to know when "-" is infix or prefix
without a parse tree.