CLJS-363: `format` %s behavior is incorrect for keyword, symbol etc.
CLJS-357: large PersistentVector benchmarks

Benchmarks for the following:

* building a large vector without using transients (to get an idea of
  conj perf),

* conjing onto a large vector in a situation where this involves a
  push-tail operation,

* associng in non-tail position in a large vector,

* popping a large vector where this involves a pop-tail op.
Send proper content types when serving JPGs, PNGs and stylesheets.

The send-static fn in the browser repl tries to detect the content
type of a file by it's pathname extension. This patch adds support for
JPGs, PNGs and stylesheets as well. Without proper content type Chrome
and Firefox are refusing to apply stylesheets.
CLJS-334: produce sane error message when ctor arg to new is not a symbol
* benchmark/cljs/benchmark_runner.cljs: decrease large vector by order of magnitude
add apply benchmark
CLJS-361: Invoking anonymous functions with wrong arity does not produce a warning
CLJS-366: revert CLJS-39, broke :when and change no longer necessary now that we track let expressions in loops.
CLJS-312: support :import, emit goog.provide for types/records

The following declaration causes the bar.Quux goog.provide'd
namespace/class/type/record be :require'd :as Quux and the symbol Quux
to act as an alias for bar.Quux in the foo.core namespace:

(ns foo.core
  (:import bar.Quux))

The compiler now emits goog.provide calls for deftype/defrecord forms
emitted from within compile-file*. Only one goog.provide will be
emitted for each type name defined in a given file, even in the
presence of multiple definitions specifying the same name. This has
the side effect of enabling deftype/defrecord-created types to be
specified as GClosure dependencies (in particular, it enables
deftype/defrecord support in :import).
CLJS-180: Function params shadow top-level namespace segments
CLJS-336: Hyphenated Protocols
Eliminates incorrect merging of metadata when redefining vars
CLJS-346: Complete fix for CLJS-319 pr-str regression
Optimize pr-str by making more use of StringBuffer.

Previously, a huge number of temporary vectors and lazy sequences were
built up and concat-ed, which ran reasonably on newer JS engines (e.g.
V8) but suffered from miserable performance on old engines (such as
IE8).  By passing a StringBuffer down the callstack and appending to
that, performance gains of 10-100X can be seen in older JS engines.

For backwards compatibility, the new fastpath uses a new
IPrintWithWriter protocol, and the old IPrintable is left in place.
The old protocol is used as a fallback for items that do not satisfy
IPrintWithWriter.
CLJS-370: Fix integer? for integral floating point expressions
add boolean type-hint to isNaN call
fail faster on js/Infinity && js/NaN since these cases much be tested anyway - doing arithmetic on these cases is slow. Extra tests do incur a small perf hit when testing actual numbers.
CLJS-373: prevent output from attempting to load deps.js when compiled w/ :whitespace
add missing fast path protocols
Changes to remove calls to truth_. move identical? nil? not higher
up. eliminate the declare. similarly move Reduced, reduced, reduced?,
counted?, indexed? and eliminate declares around them. eliminate
truth_ call in find. set *unchecked-if* true for body of apply.