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
Adds the script name to error messages.

- Stored in the global state object
- Displays (repl) for the repl
- Similar format as the v8/d8 executable. Node.js displays additional
  information that we don't currently have available (function names,
  etc.), although that'd be nice later.
- Currently it's only possible to execute one file at a time, but
  this should eventually be more useful when other files can be sourced.
Fixes object literal and block ambiguity

- Follows the requirements in 12.4
- Additions to the grammar test suite.
- Repairs older grammar tests and adds a test-grammar to the Makefile.
- All the examples from the WAT talk should now work as expected
  (well, according to spec. They're not really what I'd call expected ;)