Add Timeout option to the engine

Add a timeout interval option to the engine to throw a TimeoutException
when the specified interval has passed