Fix a bug in expression evaluation order

Also, give up on maintaining 100% error message compatibility
with CPython.  There are some places where it's kind of silly
to do this since the messages seem based on internal implementation
details; namely, whether to output at the global scope:
NameError: global name 'x' is not defined
vs
NameError: name 'x' is not defined
This depends on whether any function has been defined that has
a "global x" declaration.

Instead, make the tester a little bit smarter to know that certain
classes of error messages should be treated as equivalent.