Add optional timeout argument to loop:run