Refactor consumer processes into classes
Add JsonProducer and JsonClient classes.

Move `Producer`, `Consumer`, etc. to `async_task_queue.py`.

The JSON class variants (i.e., `JsonProducer`, `JsonClient`) embed the
`async_id` into the JSON message body, rather than prepending a separate
message frame before the request/responses.  Also, the `JsonProducer` class
provides synchronous access to the following commands:

    {"command": "push_uri"}
    {"command": "pull_uri"}
    {"command": "rep_uri"}
    {"command": "pub_uri"}

which return a response of the form:

    {"type": "result", "result": <uri>}

See #1.