[timeout] handlers & mutators can have a timeout, reworked async popen