Fix GC pauses by reusing canvas elements
remove code after a return in a block of statements
update test
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.
begin work on outliner pass to break up large functions. part 1: aggressive variable elimination, to reduce spilling
setup for outlining of code chunks
initial recursive logic for outlining
outlining tweaks
start to outline code
infrastructure to analyze functions and variables in outliner
testing for existing sp in outliner
start to emit spills
emit statements in outlining
Use implicit range in for loops where possible.
read results from outlined code
generate functions for split-out code
add variable info to outlined functions
add read/writes in outlined functions
Merge pull request #1355 from sunfishcode/incoming

Incoming