Asynchronously takes a val from port, passing to fn1. Will pass nil if closed. If on-caller? (default true) is true, and value is immediately available, will call fn1 on calling thread. fn1 may be run in a fixed-size dispatch thread pool and should not perform blocking IO, including core.async blocking ops (those that end in !!). Returns nil.