Add WorkerStorage: allow tasks to store async'ly

Add `WorkerStorage` which allows child tasks to store results
asynchronously through a ZeroMQ `PUSH-PULL` socket pair.  This allows
the child to continue without having to wait for a response from the
supervisor.

Note that child tasks may still use the `supervisor.store()` RPC method
directly instead, if preferred.