Fix Array#find and Array#findIndex on sparse arrays.

The Array#find and Array#findIndex methods should skip elements which are
not present in the array-like object, but not terminate the search.
Make Map/Set subclassable; support `iterable` argument to constructor.

Use the same technique added for `Promise` to kludge in support for
ES6-style construction and subclassing, factoring out some helper
methods in the process.  Add support for the `iterable` argument to
Map and Set.