Array destructuring should use iterators

The assignment

  [x] = obj;

should desugar to something like:

  $tmp = obj,
  $iter = $tmp[Symbol.iterator](),
  $iterResultObject = $iter.next(),
  x = $iterResultObject.done ? undefined : $iterResultObject.value;
  obj

When you add holes, spread and default initializers it gets even
hairier.

Fixes #840
Can we have a comment to explain why we have this second test, it looks identical to the first.

Do we need to test nested patterns w/holes in the outer pattern?