Comprehensive performance improvement to construction time of
PersistentArrayMap and PersistentHashSet
literals. cljs.core.PersistentArrayMap/fromArray now only takes on
array of KV pairs, and boolean flag no-clone. Compiler emits array map
literals with this set to true to avoid copy overhead.

PersistentArrayMap now calls through protocols on hash-map.

PersistentHashSet now starts with PersistentArrayMap underneath
instead of PersistentHashMap. PersistentHashSet now also takes an
array, if this array is less that threshold / 2 for
PersistentArrayMaps we just pass it along, again using the no-clone
trick. If larger than threshold we use transient PersistentHashSet.

Finally performance enhancement for hash-set. If we get an IndexedSeq,
which we will in the case of (hash-set 1 2 3) etc, we construct an
array and call cljs.core.PersistentHashSet/fromArray.