made translator get expression function non-recursive

it was not necessary for the get expression function to be recursive to
process the rest of the expression; the recursive call was replaced with
a loop
corrected processing of error conditions in expression

needed to catch command and operator tokens when an operand was expected
and return correct expected expression error

when checking token after operand, needed to specifically check for an
operator token type; was using isOperator(), which also returns true for
command tokens

when clearing hold stack of higher precedence operators, needed to allow
for tokens that don't have a table entry, both for precedence and is a
unary operator; replaced with precedence() that checks token instead of
the token code directly, and implemented new isUnaryOperator() that
takes a token instead of a token code

added more error tests for expression test #1 (note some of these tests
cause the older less robust translator expression mode to fail)