Refactor namespaces as normal Clojure datastructure.

In Clojure, a namespace is a mutable Java object that changes as the
namespace is modified (new vars are added). For example, *ns* will
hash to the same thing before and after def'ing a new var even though
*ns* now contains the new var. In ClojureScript, all namespaces are
contained ina single atom cljs.core/namespaces that are indexed by
namespace symbol.

Instead of using a special global *ns* symbol that holds the current
namespace as a mutable Java object, use *ns-sym* as the symbol name of
the current namespace and whenever the namespace is needed, deref the
namespaces atom to look it up.

Remove ns related functions from analyzer and add some ns functions to
core based on those in Clojure core but using cljs.core/namespaces:
create-ns, find-ns, resolve, resolve-ns.
Add declare, defonce and stub defn-

- defn- marks the def :private but there is nothing that will stop
  non-local lookups as yet.
Fix -prototype call in extend-type.
Add load-file, forms-seq, compile-forms*.

load-file is similar to the Clojure version but returns a map of
compile info rather than the result of the final form in the file.
load-file* returns the same map but includes :emit-str (the emitted
Javascript) and :output (any output printed during load, rather than
printing it directly).
Fix typo in comment.
Fix nodecljs.cljs to not rely on js/env.
Add quick.cljs test to cover basics quickly.

At the REPL load and run like this:

> (load-file "../test/cljs/cljs/quick.cljs")
> (runt-tests)