Rewrite Expr to represent node of expression tree.

Exprs should be nodes that are a part of an expression tree.  Whereas
before Exprs could have operands that were not Exprs themselves, now
Exprs can only have other Exprs as operands.  This is to create a tree
structure that can more easily be traversed.

Each Expr has a value that can be either an operator or a value.  So now
operators also take up a node in the tree, while before they were
grouped with their operands into one node.
Use shunting-yard for parsing