Major expression rework to fix bug #24

The major difference in this commit is that expressions only manipulate
Expression objects internally instead of converting to integer type for
constant values.

The Boolean Function API methods still return ints when necessary
(eg a * 0 returns 0, not EXPRZERO), which is nice for interactive use.
Move operators into base Function