CLJS-638: Keyword invoke is inconsistent with clojure

Keyword -lookup arity incorrectly dispatched to the 3 argument get instead
of 2 argument get.
add :js to list of ops optimizable by and/or, add wrapping parens to
boolean exprs
add empty testing files
fix bug where nil could be a path in source map
source maps work with incremental compilation now
If output-to is :print if compiler redirects output. In that case set sourceMappingURL to source-map to avoid trying to open file :print.

Also update source map to use //# (new format) instead of //@ (old format).
make source map incremental compilation support even more
robust. previously source map support would not work for incremental
compilation across JVM runs. Now compiler tracks which files it has
seen, if a file has never been encountered and source maps are enabled,
then it will trigger a recompile, under :optimizations :none just checks
for existence of the corresponding .map file for each compiled .cljs
source file.

java.io.File -> File in compiler.clj

now that incremental compilation is more robust, remove reset hacks for
:optimize-constants and :advanced.
1934 -> 1978
use new source map convention
CLJS-521: pass along entire repl environment when loading dependencies
CLJS-646: single segment namespaces and reify don't work

the exists? call in reify was not correct, it was a property access on
the namespace, which would of course get resolved by the compiler,
creating a symbol foo/foo (in the case where foo is the single segment
namespace). now we actually emit a symbol of the namespace and the type
symbol, the exists? macro now annotates this symbol with
:cljs.analyzer/no-resolve, the analyzer now respects this so the user
won't get spurious warnings from using exists? on vars that don't exist.
CLJS-645: parse-ns needs to include 'constants-table as a dep

Did not having the constants-table as an implicit dependency on all
namespaces if cljs.analyzer/*track-constants* true. Minor refactor of
the logic in both compile-file* and parse-ns
CLJS-641: js* overflow for large inputs

sequence construction not wrapped in a lazy-seq, would result in a stack
overflow for large inputs
fix another stack overflow case on large inputs in js*
CLJS-631: Use ana/namespaces for shadowing vars

The compiler used to be keeping track of namespaces it
had emitted and using that atom to determine whether a
variable shadowed a declared namespace. If dependent
namespaces were emitted before their dependencies, this
could result in the dependent file shadowing the names
of the not-yet-compiled dependency. This happened both
during out-of-order clean compilation and certain
instances of incremental compilation.

This patch utilizes the analyzer's existing namespaces atom
to track loaded namespaces rather than maintaining a separate
atom in the compiler.

Files are guaranteed to be analyzed in dependency order, so
this ensures that all files with valid ns forms will know of
the namespaces they need to avoid shadowing and behave
accordingly.
CLJS-648: persistent assoc/conj on a transient-created collision node

Port of Christophe Grand's patch to Clojure (CLJ-1285).
add implements? like satisfies? but does not check for natives that
extend the protocol. rename type_satisfies_ to native-satisfies?
relative source map paths
Provide middleware point to handle *cljs-warnings*

* Add in a default warning middleware with that same behavior as the current warning handler.
* Centralize the default warning behavior, make side-effects from each invocation of warning controllable through middleware.
* fix no-warn macro, make sure undeclared-ns-form is passed to warning for the right forms
* Make analyzer default-warning-handler respect *cljs-warnings*
* Fix default-warning-handler implementation and all the callers
* Change cljs.analyzer/confirm-var-exists: Don't call warning unless :undeclared-var warning is set, AND the var hasn't been def'd
* Add some basic all-warn no-warn analyzer tests
switch condp -> multimethod for warning string generation