Refactor step 3 of 3. Added recover and recoverWith clauses to FutureValidation.

Note that there is an idiosyncrasy checking for timeouts. The await() method on FutureValidationW specifically catches TimeoutExceptions and returns them in a Problems.Unknown. However, the await() method in FutureW does not.

We should perhaps consider removing await() from FutureW, to enforce a consistent semantics. Then again, these two are only usually used in tests so (a) perhaps it's not a big deal or (b) perhaps we should remove both of them.