WebIDL: array attribute bindings

The first commit implements simple array attribute getters and setters.

The second commit implements bounds-checking, however, I don't think we should merge it as-is. It only works for statically-allocated arrays, as it relies on `sizeof(array) / sizeof(array[0])` to determine the length of the array.

There are two ways to fix this (in either case, bounds-checking would simply be omitted for dynamically allocated arrays):

1. Use a template specialization to differentiate between known-sized arrays and those that are allocated with malloc/new, based on something like:

        template <typename T, size_t size>
        constexpr size_t array_size(T (&array)[size]) {
          return size;
        }

2. Use an extended attribute to distinguish between statically- and non-statically-allocated arrays in the IDL file.

For (1), it is apparently debated whether this is legal C++, and apparently some compilers don't support it (VC++).

For (2), I'm not sure what the appropriate extended attribute to use would be.

Tests passed: `test_webidl`, `asm2.test_webidl`
why use `EM_ASM_INT` here, instead of a C assert?