0.0-2411-8 -- Improved :main application entry point

This commit adds a :require key to the *.main.edn file that is used to
generate the application entry point. This effectively restricts
compilation to this namespace plus any dependent namespaces (i.e. other
namespaces that are transitively pulled in via :require or :use in the
CLJS namespace declaration).

For example, create a file foo/bar_baz.main.edn in your source paths,
with the following contents:

    {:require [hello.core hello.app]
    :init-fns [hello.app.index/init!
               hello.app.util/configure!]}

This will result in the following:

- A namespace will be generated with the name foo.bar-baz, in the
  fileset as foo/bar_baz.cljs.

- This namespace will contain something similar to this:

    (ns foo.bar-baz
      (:require
        hello.core
        hello.app
        hello.app.index
        hello.app.util))

    (do (hello.app.index/init!)
        (hello.app.util/configure!))

- The CLJS compiler will be pointed at this namespace only. It will pull
  in any transitive dependencies from the class path. This limits the
  scope of compilation to just the namespaces needed to compile the
  foo.bar-baz namespace, and nothing more.

- The cljs task includes the necessary goog.require('foo.bar_baz')
  script tag when compiling without optimizations, along with the script
  tag to load the goog/base.js file, etc.

  NOTE: This requires the use of --unified-mode.