[WIP] Add AsyncServer, change push/pull to bind
[WIP] Add initial draft of SocketGroup
Add echo server, add socket group test device
Prepend `self` to `args` list for `callback`

Prepend `self` to `args` list for `callback`, to allow callback targets to use
the context of the containing group, i.e., access the created sockets, etc.
This is particularly useful when running the IOLoop in a thread or process.
Add SockGroupDevice.set_periodic_callback method

Simplify test script to use `set_periodic_callback` to register a "ping" event
every half a second.  This makes it unnecessary to create sub-classes, since
all configuration can be done declaratively.
Clean up test example
Add get_echo_server convenience function

Add `get_echo_server` convenience function to return a `Process` object that
will bind a `REP` socket to the specified URI, and will echo back any request
as a response.
Add test script implementing a consumer

Add test script implementing a consumer using a `ProcessSocketGroupDevice`.
Add get_producer function.
Fix test_consumer
Change all prints in consumer/producer to logging
Add test client to test_consumer

Client automatically sends a request once every second.
Exit cleanly on ctrl-c
Add get_socks to create sockets from sock_configs
Add create_streams function

Update `test_consumer` to use new `create_streams` function to create ZeroMQ
streams.
Add convenience functions-> simplify consumer,etc.

Add the following convenience functions:

 * `create_sockets_and_streams(ctx, deferred_socks, io_loop)`
 * `get_run_context(sock_configs)`
 * `run_sock_configs(sock_configs)`
 * `run_echo_server(bind_uri)`

Use the new convenience functions to simplify processes in `test_consumer`
script.

Add arguments to the `test_consumer` process functions to configure end-point
URIs.
Add delay kwarg to run_echo_server/echo functions