Fix HttpClientFactory.shutdown() tying up executor.

When invoking shutdown() with a timeout, the factory schedules a task
to complete the shutdown after the timeout expires.  In case the
shutdown completes sooner, as it usually does, this leaves the
executor in a state that it cannot be shutdown cleanly, since it still
has the delayed task in its work queue until the delay elapses.

The fix is to cancel the delayed task as soon as the shutdown is
finished.

Incidentally, this also ensures that the shutdown finish procedure
itself never happens more than once.

RB=175637
R=si-dev,jbetz,dhoa
A=dhoa