CLJS-858: resolve-existing-var does not check vars outside current namespace

Prior to this commit we would only check vars if the prefix of the
var was the current namespace. This means normal library usage
is not verified. Instead now we check if the var is either:

A) an implicit require/import, i.e. goog.string, Math, etc.
B) is from a JS namespace (just verify the namespace)
C) exists in a CLJS namespace
CLJS-855: combinatorial code generation under advanced compilation

Under advanced compilation, :static-fns is true - efficient code
generation was done naively resulting in exponential code size when
nesting function calls of unknown arity.

Now if an invoke expression involves a fn of unknown arity instead
generate locals for the arguments then invoke. Google Closure will
intelligently rewrite these kinds of redundant assignments under
advanced compilation.
don't call resolve-existing-var on an ::analyzed var, we've already
analyzed and emitted a warning about it on the first pass
in parse-invoke do not analyze the arguments unless we know it's the last pass.
track protocol method information
CLJS-859: use https in the boostrap script
remove duped protocol implementations, picked up by new analysis
Merge branch 'master' of github.com:clojure/clojurescript
validate that a protocol is implemented only once
duplicate protocol validation needs to be in extend-type, not in dt->et
fix IFn, add missing IMeta protocol symbol
CLJS-702: warn if protocol signature doesn't matched declared

check that protocol implementation method signatures are not repeated
and actually match
0.0-2341
0.0-2342
lift *clojurescript-version* and compiled-by-version into a namespace
that we can share between analyzer/compiler/closure
add cljs.analyzer/requires-analysis?
change cljs.analyzer/analyze-file internally to return the ns of the analyzed file as a local in
a let, prep to write out the analysis cache file.
move namespace conversion to file path utilities into cljs.util, move parse-ns into
cljs.analyzer where it belongs
pass opts into analyze
convert with-core-cljs into a function of 2 arguments, compilers options
and the body to execute after loading core. in all the locations where
we invoke cljs.analyzer/analyze-file pass along the compiler options. in
cljs.analyzer/analyze-file compute the location of the cache file.