Fixed an issue when stop() was raising an exception incorrectly

Fixed an issue when stop() was raising an exception incorrectly if timeout for buildstep was None because self.timer was re-used for entirely different purpose but stop() code was unaware of such use.

This for example stopped log watcher from correctly closing file handles.

I've introduced fourth timer (independent of self.timer) and refactored timer cancelling copy-pasted code into one function.