Use IoResult for init/init_with_flags
Use IoError for add_watch
Fail on unexpected return value
Use IoResult for rm_watch
Return IoResult from event
Return IoError from close