Fixes Array#join behavior with sparse arrays

- Adds test cases from the WAT talk examples.
- Array#join was using OBJ_ITER which skipped over properties in
  sparse arrays (such as those created with the Array(length)
  constructor form) that were not actually set.
- There are no more usages of OBJ_ITER in Array.c, but there may be
  other cases where sparse arrays are not handled appropriately. I'll
  add some additional tests later on.
Better printing of sparse arrays in console.log

- Until now, an array constructed with Array(12) was printed as `[]`
  because fh_debug_arr incorrectly made assumptions based on the
  hashmap, without taking sparse arrays into account.

  An array constructed with Array(12) now is printed like this:
  [ , , , , , , , , , , ,  ]
  which matches the behavior in Node.js