fix async assertion for asm
Optimize 'HEAP32[(46 + 2|0) >> 2' to 'HEAP32[12]'

Merge joinAdditions and "num >> num" folding into simplifyBitops, and rename
it to simplifyOps. Make the main traversal in simplifyOps use a "post"
function rather than a pre function to allow optimizations to cascade.

The result is that given an expression like 'HEAP32[(46 + 2|0) >> 2',
simplifyOps can start by folding the '46 + 2', and then work its way out
and fold in the '>> 2', and arrive at 'HEAP32[12]'.