Add expand-libs with test

expand-libs transforms a collection of library symbols, libspecs, and
prefix lists into a set of fully qualified symbols and regular libspecs.

This will allow us to match require and import declarations without
using regular expressions.
Remove one level of nesting from in-originals-pred test

in-originals-pred should always be passed a collection of symbols,
libspecs, and prefix lists:

        (in-originals-pred '[java.util.Date
                             (java.util Random BitSet)
                             [clojure.string :as string]
                             [clojure.java [io :as io]]]

In no case will the first member of a properly formatted libspec or
prefix list be a collection itself, so ['((java.util Date UUID))'] is
invalid input.

This test currently passes regardless because the in-originals-pred
implementation does not do any destructuring.
Reimplement in-originals-pred with expand-libs

Previously, reconstructing the following namespace:

        (ns alpha.core
          (:require [alpha.beta :as beta]
                    [alpha.gamma :as gamma]))

        (beta/hello)
        (gamma/hello)

returned the following erroneous ns form:

        (ns alpha.core
          (:require [alpha.beta :as beta]
                    [alpha.beta :as gamma]))

This was due to the implementation of in-originals-pred, which attempted
to determine if a candidate libspec was present in the original require
by regex matching only the prefix of the candidate libspec against each
original require as a string.

e.g.
        ((in-originals-pred '([alpha.beta :as beta]
                              [alpha.gamma :as gamma]))
           '[alpha.beta :as gamma])

returns a true value even though [alpha.beta :as gamma] is not in the
original forms.

This commit reimplements in-originals-pred so that candidate forms are
matched exactly against the fully expanded set of original requires.
Fix docstring unescaping

Addresses #40

prettify used the cl-format ~A directive to print strings, then
re-surrounded them with quotes. This erroneously unescaped the string.

The proper way is to use the ~S directive to print the string as an
S-expression, escaping both quotes and backslashes to survive a (read)
correctly.

refer: https://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000
Force print newlines between namespaces in short :requires

Addresses issue #23
Prefer candidates where last segment matches

Given the ns body:

        (ns foo)

        (string/join …)

Return the ns form:

        (ns foo
          (:require [clojure.string :as string]))

Before this, [clojure.set :as string] would take precedence since
clojure.set has a var named 'join, and "clojure.set" is shorter than
"clojure.string"

The next step to divining the user's intentions is to match functions by
arity, but even that may be going a step too far.
Don't print a space after a single :exclude

Fixes case where

        (:refer-clojure :exclude [sym])

prints as

        (:refer-clojure :exclude [sym ])
Merge remote-tracking branch 'guns/fix-ns-docstring-unescaping'

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
Merge remote-tracking branch 'guns/fix-prettify-short-requires'
Merge remote-tracking branch 'guns/no-spaces-on-single-refer-clojure-exclude'
Bump to 1.4.0.
Drop support for slime from elisp interface.