CLJS-680: function name shadows JavaScript globals

Change cljs.analyzer/empty-env so we add a :js-globals entry. Change
parse fn* so that we check this for :shadow. Reformat emit-fn-method.
call output-directory fn instead of accessing the property on opts in
cljs.closure/build
PersistentVector perf enhancement

in PV -conj don't use aclone, construct the new-tail inline. Change
aclone to avoid slice. Remove aclone macro.
add more things to the :js-gobals in cljs.analyzer/empty-env that are
likely to clash.
inline PersistentVector and ArrayMap instantiation
CLJS-683: :source-map-path option

Source map paths to source files can now be made relative to anything
making integration with web work flows simpler.
add Node.js globals likely to clash to :js-globals in
cljs.analyzer/empty-env
CLJS-583: duplicate keys in sets

fix cljs.core.PersistentHashSet so that duplicate keys are
prevented. Add a fast path for hash-set inlining macro and hash-set
emission in compiler.clj, if all keys are distinct constants don't check
for duplicates
CLJS-684: throw on circular dependency
CLJS-584: duplicate map keys

cljs.core.PersistentArrayMap.fromArray now takes a 3rd no-check
parameter. The inlining array-map macro and the compiler emission for
array-maps now analyzes for constants and emits a direct instantiation
if possible - otherwise cljs.core.PersistentArrayMap.fromArray called
with no-check set to false.
CLJS-676: source maps broken under incremental compilation

Use :cljs.compiler/compiled-cljs key in cljs.closure/optimize for
generating the source map. Use the destination path as the key as we do
for :cljs.closure/compiled-cljs.
CLJS-672: source maps + optimizations + :libs breaks building

Only copy over files to the output directory if the js file record
contains :source-url information.
Shouldn't need to always append output-dir. EOM
Relativizing source-map locations based on the location of `output-to`. EOM
Adding tools.trace to my dev profile instead. EOM
Ensuring parent directories exist. EOM
Don't explicitly require tool.trace. EOM
Take care of relativizing without output-dir. EOM
Relativizing around output-dir as well. EOM
Deleting extraneous let. EOM