Add yield suspensions

Adds a soft timeout suspension, similar to the current hard timeout, which instead of throwing an exception returns an (optional) suspension whose default behaviour is to reschedule the resuming of the suspension after 0 sec.

Also optimises some of the codegen to only create timeout checks when the appropriate timeout value is set.