Merge pull request #28 from arthuredelstein/web-edit

REPL behavioral features (*e, more err line numbers)
io.cljs: implement classpath-like search for resources.

cljs.io/*clojurescript-home* is set to the top of the Clojurescript
directory.

cljs.io/*classpath-suffixes* represents the list of subdirectories
with *clojurescript-home* that are searched for resources.
Start of ClojureScript compiler in ClojureScript.

Compile like this:

rm -rf out/; bin/cljsc bs.cljs > bs.js && \
    bin/cljsc src/cljs/cljs/compiler.cljs > compiler.js && \
    bin/cljsc src/cljs/cljs/reader.cljs > reader.js

Then load comp.html. You will have a rep JavaScript function which
will read, eval and print:

    rep("(+ 1 1)");

CAVEAT: macros are not yet supported.
Misc cleanup and add ns-snap.
Fix strings, numbers, false, regexp.
Add chouser's jsrepl modified to use the analyzer/compiler.

Build like this:

cd web
../bin/cljsc ../src/cljs/jsrepl.cljs > jsrepl.js
Add build script for jsrepl.js.
Add some explanatory text to the jsrepl page.
Update README to explain the patched version.
CLJS compiler and REPL working in Node.js

Compile and run the CLJS REPL:
    cd node
    ../bin/cljsc ../src/cljs/noderepl.cljs > noderepl.js
    cp ../src/cljs/goog.js out/
    ./run.js noderepl.js

Compile and run the the CLJS compiler wrapper:
    cd node
    ../bin/cljsc ../src/cljs/nodecljs.cljs > nodecljs.js
    cp ../src/cljs/goog.js out/
    ./run.js nodecljs.js hello.cljs

The :nodejs compilation target is currently broken. However, the
node/run.js bootstrap script enables compiled CLJS code to be
invoked that was not compiled with a :target.

Also, rename the jsrepl.cljs to webrepl.cljs to disambiguate with the
node.js equivalent (noderepl.js).
Generate analyzer namespace snapshot while compiling.

This replaces the hardcoded bs.cljs file that only
provided cljs.core and cljs.user for the analyzer.

In order to load the snapshot, in Javascript (either in web/jsrepl.html
for web based or node/run.js) we set cljs.analyzer.namespaces to point
to cljs.namespaces (the snapshot built up during compilation).
Add syntax quote/unquote to the reader.
Define *out* and *ns* to squelch compile warnings.
Make node and web REPL prompt be *cljs-ns*
Remove verbose reader debug.
Move namespaces to cljs.core and "refer" it from cljs.analyzer.

This removes the need for the custom Javascript code in the bootstrap
files and in the namespace snapshot code.
Add macro support to JS built cljs analyzer/compiler.

This doesn't yet enable defining and immediate use of macros during
JVM based analyze/compile of cljs.

In other words, in the live Node.js and web REPL you can define new
macros and use them via the REPL. However, you can't define them yet
in a file, analyzer/compile it and then use them during or after
analyze/compile.
Remove old multimethod version of emit-constant.
Remove old version of ns-snap from compiler.cljs
Move PushbackReader to core.cljs.

In normal Clojure this comes from java so it makes sense to put it in
core.cljs to make it more widely available (analyzer.cljs and
compiler.cljs will want this when they begin supporting whole files).