Fold multi-value results properly (#984)
Expressions need to be treated specially when folding an expression
with a result count > 1. Since the expression cannot be split, we can
only include it as a child of another expression if all of its values
are used, for example:
```
(func $dup (result i32 i32) ...)
(call $dup) ;; produces two values
(i32.add) ;; consumes two values
```