Remove race-condition in UpstreamHandler.

We were checking if the future was complete, then explicitly pushing a
failure into if it was not. However, there was a race condition between
the check and the call to failure. This now uses Promise's tryComplete
method instead, which can take a failure too.

PLATFORM-1068 #finish
Merge remote-tracking branch 'tixxit/bug/recomplete-race-condition'