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
CLJS-642: deftype/record should not emit goog.provide

A misfeature as multiple provides should not appear in the same source
file - would wreak havoc when using :optimizations :none.

:import is now only for Closure style libraries that make the
constructor the same as the namespace. Enhance :import to support
[lib.ns Ctor*] syntax like Clojure.

Fix tests.
relax :import to validate w/ sequential? not vector?
fix busted instance? cases
fix busted cond case in cljs.analyzer/source-path
CLJS-402: runtime obtainable compiler version number

Change build script to add compiler version information to compiler.clj
and core.cljs.

In CLJ *clojurescript-version* will be bound to a map. Provide a
CLJ function that will produce a string. In CLJS
*clojurescript-version* is bound to a string.
CLJS-659: tag compiled files with compiler version

The first line of CLJS compiled files is now a comment about the
compiler version that generated the JS file. Use this information to
determine whether files need to be recompiled.
CLJS-654: Quit repljs on ^D, don't loop on nil

Previously, entering either nil or ^D at repljs would cause the
REPL to go into an infinite loop of printing nil. Evaluating
nil will now evaluate it once and then stop to read from stdin.
^D will quit out of the REPL.
CLJS-627: Add warnings on function arity problems

This patch adds three new warning types that may be thrown when
defining a function.

:multiple-variadic-overloads : Can't have more than 1 variadic overload
:variadic-max-arity : Can't have fixed arity with more params than
variadic
:overload-arity : Can't have 2 overloads with the same arity
CLJS-657: Remove duplicated warning method
CLJS-661: (try ... (catch :default e ...) ...)