calling iomux_close() instead of iomux_remove()

it ensures releasing going to the correct release path preventing leaks in some corner cases
ensure calling iomux_close when not retaining the lock
the iomux_close callback already takes care of releasing the async_reader context

also now iomux_remove() is never called earlier so we don't need to check for the
return value from iomux_close()