CLJS-879: add `update` from Clojure 1.7
CLJS-881: check for duplicate keys in array-map

the function impl of array-map currently calls the constructor
directly, while the macro version calls .fromArray. This means
the latter correctly checks for duplicate keys while the former
does not.

Switch the array-map function to use .fromArray.
CLJS-875: bump tools.reader dep to 0.8.10
CLJS-510: Throw error when :output-wrapper and :optimizations :whitespace combined

This combination doesn't produce working JavaScript file.
Add nthrest
move es6-iterator up, so seq types can use it
make all ISeqable types ES6 Iterables
use ES6 Symbol if available
add experimental support for converting ES6 iterators into seqs
add new interop helper for invoking methods like "@@iterator" which are
not valid unquoted JS object properties
fix ES6IteratorSeq so it correctly caches rest
add js-in interop macro
CLJS-863: Invalid arity error when calling 0-arity multimethod
Join preambles with newline line to catch cases with files without newlines.
CLJS-873: non-higher-order calls to array-map should return PAMs

This fixes the cljs.core/array-map macro backing non-higher-order calls
to cljs.core/array-map so that it always returns PersistentArrayMaps.
CLJS-888: Better placement of newlines in emitter
CLJS-888: Omit redundant {} around emitted recur
Recursively check IEncodeClojure in js->clj
CLJS-814: clojure.string/reverse breaks surrogate pairs A surrogate pair's code units should not be separated or reordered by string reversal. This changes ClojureScript clojure.string/reverse to behave exactly as in Clojure and Java, i.e. keeping surrogate pairs in their original code unit order.
CLJS-716: support hashing of JavaScript dates