Add Timeout option to the engine

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