Refactor Wait classes

WaitUntil and WaitWhile share common functionality in wait() method. It should be extracted to the common ancestor AbstractWait. 

Also, there is an error swallowed on line 76