Less temporary variables in desugaring

Readability. If I did that, I'd have `rec` return a pair of `Tree` and extracted statements, and I'd have to chain the extracted statements through everything. It's possible, but does not seem more readable to me. For example,
```scala
case UnaryOp(op, lhs) =>
  UnaryOp(op, rec(lhs))
case JSBinaryOp(op, lhs, rhs) =>
  val newRhs = rec(rhs)
  JSBinaryOp(op, rec(lhs), newRhs)
```
would become
```scala
case UnaryOp(lhs) =>
  val (newLhs, extractedStats1) = rec(lhs, extractedStats)
  (UnaryOp(op, newLhs), extractedStats1)
case JSBinaryOp(op, lhs, rhs) =>
  val (newRhs, extractedStats1) = rec(rhs, extractedStats)
  val (newLhs, extractedStats2) = rec(lhs, extractedStats1)
  (JSBinaryOp(op, newLhs, newRhs), extractedStats2)
```