use precedences to recreate parentheses with binary operators

added precedence variable to stack and precedence argument to push with
a default of the highest precedence (used for simple operands like
variables and constants); added access function to get the top item on
the stack; and a new pop with parentheses access function that pops the
top stack item and optionally adds surrounding parentheses to it

modified binary operator recreate function to surround operands with
parentheses if precedence of operator is higher than or same as second
operand and higher than first operand

moved highest precedence definition (to be accessible)

updated expression test 2 (parenthetical expressions) to contain the
correct expected output (only some of which passes with the above
changes)