[SPARK-4813][Streaming] Fix the issue that ContextWaiter didn't handle 'spurious wakeup'

Used `Condition` to rewrite `ContextWaiter` because it provides a convenient API `awaitNanos` for timeout.
In general, I'm a fan of the FindBugs annotations.  I've had trouble getting the various analysis tools to work well with them in Scala, though.  +1 to this commenting convention, though; this is very helpful.