Make sure js.Block() is always created with 2+ elements.

If applied to 0 element, it becomes js.Skip(). If applied
to 1 element, that element is returned.

This makes sure that trees reaching JSDesugaring are as
unnested as possible. This, in turn, allows it to consider
as many trees as possible as being already simple JavaScript
expressions, which need not be unnested with temporary
variables.
More rational usage of exprToStat() and statToExpr().

This makes sure the js.Block(..., js.Undefined()) that we
create in statToExpr() at various places are eliminated
by exprToStat() for emission in statement position.
Alternative implem for protection of receivers of raw apply.

This is an alternative implementation of the protection
mechanism introduced in 3be49088aaee3ec8d4cdabf3ef286e342febcd2e.

This new mechanism goes through a simple identity function,
instead of going through a local variable. It produces less
code because 1) it is shorter in the first place and 2) it
does not introduce a non-JS-expression where there was none,
and hence the desugaring does not have to extract even more
temporary variables.
Make JSDesugar.unnest() a bit more clever.

To avoid more arguments to be unnested in temporary
variable when possible.
Fix: avoid to create a js.Try wout catch nor finally.