Fix timeout sleep handling to track time more accurately
Merge branch 'timeout-sleep-handling'
Various bits of refactoring and tidy up on current timeout implementation, to make it easy to add after() shortly
Added after() as an analogue of timeout() which does not terminate early if the condition passes

This allows for using .never(), atMost(), times() to be effectively, other with timeout() these will typically immediately pass, probably not what was intended.