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. Returns nil.