added reduce() to expression class. lots of fun bugs to find

reduce() will prevent it from doing things like 6x^2 + 5x^2

i found lots of bugs for special cases. they all seem to deal with
iterator problems. i don't know if reduce caused them, or if they were
present before. some of them seem to deal with the < operator (which i
redefined to make 0^0 smaller than anything so that we could combine
terms, make the second term 0^0, move to end, and erase from list). some
of the iterator errors are in the toString function, which i don't
understand. it stops at line 51.

the program works in most regular cases, but it has problems when
dealing with negative exponenets, zero bases and zero exponents.

some error cases:
x^3 - x^2 - 3x - 4
+0x^3 + x^2 - 2x
----------------------
error

0 + x^2 - x^2
+x^-2 + x^-3
---------------------
error

0^1
+ 1^-1
---------
error