support SpreadElements in destructuring array patterns

kangax's table has the following test:

```js
var [a, ...b] = [3, 4, 5];
var [c, ...d] = [6];
return a === 3 && b instanceof Array && (b + "") === "4,5" &&
       c === 6 && d instanceof Array && d.length === 0;
```

after this change we desugar the above to:

```js
    var %destruct_tmp0 = [
            3,
            4,
            5
        ], a = %destruct_tmp0[0], b = %destruct_tmp0.slice(1);
    var %destruct_tmp1 = [6], c = %destruct_tmp1[0], d = %destruct_tmp1.slice(1);
    return a === 3 && b instanceof Array && b + '' === '4,5' && c === 6 && d instanceof Array && d.length === 0;
```

(note the `slice` calls)