2075 -> 2080
test fn arity inference, add a few more lib cases
cond -> core/cond, prep for cond in CLJS that doesn't return null as
final case when there is a provided default
only use numeric type hints where we actually need them.

Changed infer-tag :if to check if we have a truthy test and ignore the
else-tag in that case, addresses cond always returning a type union with
nil.

Type hint nil as 'clj-nil, this is because we want to return nil if we
could not infer a tag.

Relax arithmetic type checking to accept type unions with 'clj-nil, this
is because type inference isn't strong enough to know whether first will
return nil or not. Handling this would require knowing that the variadic
arg is non-empty because a smaller arity exists and we would need to be
able that a non-empty argument to first will never return nil.

Don't add unnecessary ^number type hints to core.cljs.

Add tests for the above cases.
remove most protocol extensions to nil, just handle directly
CLJS-480: reader/*data-readers* bound inconsistently

Stop binding reader/*data-readers* haphazardly. Instead bind it to
cljs.tagged-literals/*cljs-data-readesr* only in cljs.analyzer/forms-seq
and make sure to actually capture its value to avoid lazy-seq issues.
CLJS-692: cannot access properties on imported Google Closure
constructors

change resolve-var to check :imports for case where symbols have .'s in
them
CLJS-697: top-level symbol reference doesn't get an automatically
inserted ns-name

Add another resolve-var . case, check the current ns
CLJS-699: letfn fns not optimized

Fix the first pass so that we mark the local as an :fn-var. Analyze the
fn without warnings so that the second pass will have the correct
information.
new ns - cljs.analyzer.utils, make looking at the AST more fun
*passes* default value is nil, analyze check *passes* for value, if not
 set defaults to [infer-type]. change cljs.analyzer.utils/to-ast to
 check *passes*, if none set default to
 [elide-children simplify-env ana/infer-type].
inline make-array so that if given number, expand into inlined dense
array of n elements - 3X faster assoc on PHMs
fix convention around foo.EMPTY, add transient PHM benchmark
Decrement the column for 0-indexed source maps

tools.reader uses 1 for the starting index of the line and columns.
Sourcemaps use 0 for the starting index.  So we need to decrement the :column
as well as the :line when making the sourcemap map.

Additionally update the comment about this to be correct.
Send inline source map information for form evaluation

When evaluating forms from a browser repl it is nice to see and get errors
referencing source information. To achieve that:

1. Send a sourceMappingURL with a data url using a base64 encoded
source map
2. Include sourcesContent in the source map based on the form being evaluated
3. Use sourceURL to name the eval block as the generated file
referenced in the source map.

This patch uses the :source metadata from tools.reader as the value to send
back to the browser when possible.  In the case of something without metadata
(string, number, etc) it will use (pr) to get the string representation.

Source maps are only generated and sent for a repl-env with a truthy
:source-map field, so the browser-repl has been changed to merge that value.
Make work
CLJS-700: Fix for clojure.core.reducers/fold. Previously (r/fold + + [1 2 3]) returned the wrong result.
optimize reset!
Use //# for inline source maps
CLJS-709: optimize clj->js for non-map collection case to array
CLJS-690: add sequence & sorted?