Refactor TimedAsyncHandle's getEstimatedTimeRemaining to return Optional now.

Initally though about throwing an exception, but really the estimated time might be asked for even after the process has started, so it's not really suitable to throw an exception in that case. Returning an optional seems like the next best possibility.