(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.
Separate request options

Seperate the request options in the async request function,
then pass these down to future-callback rather than the
entire list of options.
(TK-27) Add test for sync client close

Add test to make sure that a sync client is closed properly.
Merge pull request #8 from fpringvaldsen/TK-27-manage-clients-explicitly

(TK-27) Allow user to manage clients explicitly