Use Shunting-yard and RPN to parse and evaluate

It's as simple as this: this commit rewrites lee to not use my homebrew
algorithm to parse and evaluate the expression but Shunting-yard/RPN instead
which makes the thing much more robust.

Stack and queue structures had to be implemented and nearly everything
changed - except for the scanner.

However, the parser, and I do want to emphasise this strongly, inherits some
of my former state machine parsing algorithm because this seems the only way
to me to make the parser emit proper syntax errors. Shunting-yard is
incapable of detecting all errors and at evaluation time it's too late.

OK. Some little performance improvements are scheduled but basically, the
program is done now.