First pass at Real Keywords(tm) in ClojureScript

Cleanup debug js output

Collapse nested ifs into a cond
Touch up Sean Grove's Keyword patch

Tweak analyzer/compiler bits and leave notes about what should be changed
in the near future. Changed to compiler so that the Keyword changes work
outside of advanced compilation, both for <= simple optimizations and
the REPL. Fix a bug around keyword as fns <= simple optimizations.

Add new compiler option - :optimize-constants. This is only enabled in
advanced optimizations or if explicitly enabled.

Remove remaining hacks around keywords as strings.

BREAKING CHANGE: add keyword-identical?. There is no longer any
guarantee that keywords will be identical, you must use
keyword-identical? Change the tests in array-map, hash mapss, and
defrecord to account for this change. Remove tests with bad assumptions.
Inline keyword?
CLJS-509: spurious protocol warning

change analyze-file to also accept java.io.File. change parse-ns so that
we restore namespaces to it's value prior to analysis. change
compile-file so that we always analyze files even if they don't require
re-compilation. parse the ns form after that to extract out the
necessary information.
only analyze files that don't need recompilation if we haven't seen them
before.
don't reset namespaces, we have smarter incremental analysis now based
on whether a file needs recompilation
Merge branch 'master' into keywords
reset constant-table if :advanced optimizations, :optimize-constants, or
explicit reset. Otherwise during incremental builds constant table can
easily get out of sync.
because of inconsistency of dependency ordering we must make sure that
core is analyzed.
explicitly handle array reduce cases
backout format, it cannot be optimized by GClosure and provide little of
the functionality promised by Clojure's format/printf
Allow upstream :foreign-libs to be used [CLJS-588]
string? no longer need to check for unicode char
inline string?
no need to export set-print-fn!, not useful under advanced compilation
Fixes the off-by-one line numbering in Chrome source inspector, and emits column information for several binding forms.
don't magically add extension to source map file, just use provided
name. Built in server now serves .map files.
serve .cljs and .map
changes browser repl server to serve files referenced in source map that
are in jars and in project directory
typo