Fix reversed operators in Python bindings

Currently, all reversed operator overloadings in the Python bindings
are defined to be the same as the non-reversed operator. As a result,
if you attempt, for example, (int OP Expr), you'll actually get (Expr
OP int). This is fine for symmetric operators, but is wrong for
non-symmetric operators.

Fix this by 1) extending the _2w method to take two operands rather
than assuming the left operand is "self" and the right operand is
"other" and 2) defining reversed versions of all non-symmetric
operators (including non-overloaded operators). We also add a test of
all of the overloaded operators.

Fixes #195.
2 files changed