class['a]timeout_engine :float -> exn -> 'a engine ->['a]engine
timeout_engine d x e: If the engine e finishes within d
seconds, the result remains unchanged. If the engine takes longer,
though, it is aborted, and the state transitions to
`Error x