Add custom TimeoutError

Move TimeoutError to module, publish as when.TimeoutError.  Clean up
unit tests