Extract make-summary-parts from summarize
Clarify docstring for :errors entry

Also fix some typos and kill trailing whitespace
Prepare for ClojureScript development

We will hand-port the CLJS version of the main tools.cli namespace, but
use lein-cljsbuild, lein-dalap, and clojurescript.test for testing both
CLJ and CLJS builds.

lein-dalap is a preprocessor like cljx, but has the advantage that
CLJS-only forms are hidden within #_(:cljs ) comment forms so that the
file may remain as valid Clojure.

This is only for local testing of the hand-crafted CLJS file, so I don't
believe this runs afoul of any of the contrib library guidelines.
CLJS: Split test namespace, port tokenize-args + tests

Notes:
    - We must avoid JS reserved words in arglists; e.g. "arguments"

    - There are no Vars in CLJS, but we can access them through ns
      qualification

    - The tests for the non-portable legacy fn cli/cli have been moved
      into their own namespace
CLJS: Port compile-option-specs, parse-option-tokens

These functions ported smoothly, aside from a couple of interop
discrepancies.
CLJS: Port cli/summarize

We extract and port the fn format-lines, which uses pprint/cl-format in
Clojure and goog.string.format in CLJS.

This removes the only non-CLJS dependency from the CLJS version.
CLJS: Port cli/parse-opts

Again, we change the arg parameter "arguments" to avoid shadowing the JS
reserved word.

Porting this library turned out to be quite easy!
Clean up and refactor CLJS port

- Change CLJS namespace to cljs.tools.cli
  (precedents: cljs.core.async, cljs.core.typed)
- Use leiningen.dalap middleware
- Favor lein-dalap ^{:cljs form} replacement metadata over #_(:cljs form)
  for better legibility
Only include defaults column in summary when some will be displayed

Boolean options do not show their default values, and not all options
with required arguments specify a default!