optimizer: more optimizations for begin0

This has three commits:

The first one is the interesting one. It fix a few test of `begin0` that were broken by constant propagation and ads new reductions for `begin0`.

The other two are only some ideas, that don't improve the running time:

The second changes `(beg0 X #f)` to `(beg0 X #<void>)` because `#<void>` express better that it's not important what is in the second expression.

The third changes `(beg0 X #f)` to `(beg0 X)` because the current implementation of `beg0` preserves the continuation marks, even when it has only one expression.