CLJS-504: Empty arrays and strings don't seq as nil

Colin Jones' patch w/ fixed test and formatting.
bring back toString on the core collections, include a new lower level
`pr-str*` which doesn't bring in all the other printing machinery
Add with-redefs

Remove duplication by using with-redefs in binding
need the output wrapper for JavaScriptCore since global gc will get
clobbered
variadic aset + inlining
CLJS-480 bind *data-readers* in parse-ns

This fixes an error with files that are already compiled,
and just analyzed for their content
Bring back multiple test compilations and overhaul output formatting

Since recompilation without changes + reader tags has been broken by CLJS-480, this patch also serves as a test case in and of itself

Removed flag -n from js (SpiderMonkey) invokation, since that option doesn't exist in v1.8.5
CLJS-506: Add a :debug flag to the compiler options.

This makes code compiled in advanced mode readable, by setting closure compiler options:
- generatePseudoNames true
- anonymousFunctionNaming AnonymousFunctionNamingPolicy/UNMAPPED
Analyze quoted collections

Added :quoted? to env
Quoted forms now preserve metadata
Fixed bug with quoted namespaced keywords
Elimited emit-constant cases for collections
Merge branch 'master' into specify
Merge branch 'debug-names' into specify
add INamed to the fast path list
CLJS-499: Reassess ObjMap vs. PersistentArrayMap

Deprecate ObjMap.

ObjMap was introduced as optimization to leverage the performance
benefits around JS Objects for access. However in order to avoid
issues around possible prototype modification of Object as well as the
performance hit of hasOwnProperty, ObjMap relied on an internal array
for determining the presence of a key - every lookup call involves a
scan, just like PersistentArrayMap.

Because of the extra array, modifying an ObjMap required considerably
more work.

PersistentArrayMap has been tuned following the enhancements made to
Clojure's PersistentArrayMap. PersistentArrayMap on V8 has as good as
or faster lookup times than ObjMap, and modification times are up to
>9X faster according to our benchmark suite. JavaScriptCore also shows
performance benefits though they are not as dramatic. On Firefox the
performance is degraded but in general Firefox lags considerably on
all ClojureScript benchmarks.

As it turns out most users were likely already using PersistentArrayMap by
default as there was a compiler emission bug, only empty maps compiled
to ObjMap.

Fixed bug in TransientHashMap logic, we use
cljs.core.PersistentHashMap/EMPTY rather than the empty map literal.
fix mailing list link descriptions
Add IReduce protocol to array and cljs.core.List. Fix typo in reducers/append!
support printing JS objects
When specifying IFn: Directly emit IFn methods

cljs$core$IFn$_invoke is a special case in cljs protocols. It is called without the fn (this) as an additional first argument. Thus we generate a wrapper adding the first arg.

cljs$lang$applyTo and cljs$lang$maxFixedArity are generated.

.call is generated aswell, with variably arity + call to correct cljs$core$IFn$_invoke$arity$*.
Merge remote-tracking branch 'origin/master' into specify