Utility that lifts a
Future[T] into a
Future[Try[T]], just because
it is useful sometimes.
Combinator that returns a new Future that either completes with the original Future's result or with a TimeoutException in case the maximum wait time was exceeded.
specifies the maximum wait time until the future is terminated with a TimeoutException
is the implicit Scheduler, needed for completing our internal promise