(TK-23) Port to apache HttpAsyncClient

* Ports the code over to use the Apache HttpAsyncClient library
  instead of http-kit, as we were getting some weird and inconsistent
  SSL errors from http-kit, and
* Simplify the API (by eliminating a lot of the supported configuration
  options).  Some of these options we'll eventually want to add back in,
  but for now, getting rid of them makes the API less cluttered and
  also gives us the opportunity to do a better job writing tests
  for new options when we do add support for them.

For now it only supports constructing a new client on every request.
I intend to add API for creating a client explicitly, and a protocol
for how to interact with the client.  This will allow users to
re-use an existing client as they see fit... but this hasn't been
implemented yet.
(TK-23) Cleanups based on PR feedback
Merge pull request #7 from cprice404/feature/master/TK-23-port-to-apache-async

(TK-23) Port to apache HttpAsyncClient
(TK-27) Add async client protocol

Add async client protocol to the async.clj file. This protocol
has methods for all the various HTTP request types.
(TK-27) Modify create-client function

Modify create-client function in async.clj to now return a new
client wrapped in the async-client protocol. Make create-client
public. Modify request to make a default client if none is
provided to support these changes.
Fix typo in test comment

Fix typo in test comment, which was referring to an async client
as a sync client.
(TK-27) Allow clients to persist

Modify the handling of clients such that a client that is
explicitly created by a user will not be closed after receiving
a response.
(TK-27) Add test for persistent async client

Add test for persistent async client. This test creates a
persistent async client, then uses it to make each kind of HTTP
request.
(TK-27) Put persistent client in own ns

Put the persistent client in its own namespace. Remove the
persistent- prefix from the front of the persistent client
http request functions.
(TK-27) Move test

Move persistent async client test back into the
async-plaintext-test file.
(TK-27) Add persistent sync client

Add a persistent sync client to the persistent-sync namespace.
With this namespace, a user can now create a persistent
sync client for reuse. Also, add persistent sync client test.
(TK-27) Refactor client protocols

Refactor the async and sync client protocols into a single
protocol which resides in a new file, common.clj.
(TK-27) Move schemas into common

Combine the schemas and common namespaces.
(TK-27) Remove persistent namespaces

Remove persistent-async and persistent-sync namespaces,
moving their contents into async and sync, respectively.
(TK-27) Dry up use of defaults

Dry up use of defaults. Now, the second signature of the
request function will pass in nil for the client argument
in the third signature, which will create a default client if no
client was provided.
(TK-27) Add request-with-client functions

Add request-with-client functions to the async and sync
namespaces. These now do all the work of the request functions,
so that the request functions cannot directly be passed a client
by the user.
(TK-27) Add tests for request-with-client

Add asynchronous and synchronous tests for request-with-client.
(TK-27) Add schema docstrings

Add docstrings to certain schemas. Specifically, they were added
to schemas whose purpose could not be made obvious through their
name.
Fix test failures

Fix test failures introduced by previous commit by
changing definition of Client protocl back to
CloseableHttpAsyncClient.
Use ok alias for consistency

Change instance of schema/optional-key to use ok alias instead
for consistency with the rest of the file.