try to tweak async client API

For discuss API.  

Async http call only useful when:
* Performance matters
* The async API is very easy to use, virtually no overhead for programmers

Learn from clj-http.
Request macro (low level) usage
```clj
(try
    (request {:url "http://127.0.0.1:8000"} resp
             (println resp))
    (request {:url "http://127.0.0.1:8000"} {:keys [status body headers]}
             (println status))
    (catch Exception e                    ; request error
      (println e)))
```