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.
Improved after() to return immediately if a test has definitely failed, rather than waiting the full time
Added early completion on definite failure to timeout() too, by refactoring to combine after() and timeout() implementations