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?
fix typo in seq, ILookup -> ISeqable
CLJS-582: (set [1 2 2]) => #{1 2 2}

Remove ill considered set construction optimization - was naively
applying idea from list construction optimization to sets.

Instead handle IndexedSeq case specially as this optimizes hash-set as
well as small PersistentVector case. Otherwise just loop/recur reduce on
a transient set with appropiate type hinting.
CLJS-585: ChunkedCons does not implement INext
Fix split issues.
CLJS-565: Allow the clojurescript reader to read "%"
Add project.clj
explicit JVM opts
CLJS-580: def + fn bug

Only pass name to analyze-seq, name only needed by fn case, not data
literal cases.
test for CLJS-580
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