Xor optimizations.

Optimize x^-1 to ~x; this comes up because LLVM does not have a bitwise
negate operator. Optimize x&1^1 to !x; this comes up because of how LLVM
lowers C++ bool variables.

Also, add an optimization to simplifyExpressionsPre to eliminate |0 from
'~' expressions in more cases.
Add '!==' as a comparison operator.