Decouple analyzer from compiler

The analyzer is now living in it's own file, with all related
functions. The rest of the compiler has been updated so that
references to the analyze part of the compiler now references
the analyzer namespace.
* benchmark/cljs/benchmark_runner.cljs: merge master
* src/clj/cljs/compiler.clj: *cljs-file* -> ana/*cljs-file*
Fix (= (js/Date.) nil

Also cleans up time macro, which was passing .getTime an extra arg.
Import memfn macro and add tests
CLJS-322: introduce cljs.core/obj-map

obj-map is guaranteed to produce ObjMap instances (of arbitrary size).
* src/clj/cljs/closure.clj: CLJS-323: add compiler build :warnings true option
CLJS-325: copy over destructure, let, loop to cljs.core to fix destructuring

Copy & paste from clojure.core with adjustments to make things work
again and remove some metadata.
hash-set and faster set construction
CLJS-328: fix :require spec handling in ns

Fixes singleton vector handling in :require specs so that all specs in
the following snippet are equivalent:

(ns foo
  (:require [bar.quux :as bar.quux]
            [bar.quux]
            bar.quux))
CLJS-324: implement cljs.core/format as wrapper for goog.string.format

Also adds printf (copy & paste from Clojure).
* src/cljs/cljs/core.cljs: fix typo
CLJS-330: fix (hash js/undefined)
CLJS-333: add missing arity to cljs.core.Keyword's IFn implementation
'block-children' helper function should return nil when given a nil argument. Fixes #331
CLJS-332: have UUID's = impl check that the other object is also a UUID instance
* src/clj/cljs/compiler.clj: fix bug around fns whose only non-zero arity is variadic (i.e. hash-set). was emitting a false - false does not get emitted as empty string like nil does.
Add tests for default values for map lookups.
* src/clj/cljs/core.clj: general fix for CLJS-330, protocol dispatch should handle undefined by coercing to nil
* src/clj/cljs/compiler.clj: remove pointless emission of "void 0;"