promise and deliver
(defn <!!
"takes a val from port. Will return nil if closed. Will block
if nothing is available."
[port]
(let [p (promise)
ret (impl/take! port (fn-handler (fn [v] (deliver p v))))]
(if ret
@ret
(deref p))))