Address memory leak

Refactor timeout task handling so that the reference to the HTTPClientHandler
object can be immediately nullified when the task executes or is cancelled.

It seems that the java.util.Timer does not purge cancelled tasks automatically,
as such the TaskQueue retains references to the timeout TimerTask objects.  When
these were non static inner classes of HTTPClientHandler and implicit reference
is held to the HTTPClientHandler.  As such all TimerTasks and their parent
HTTPClientHandlers were strongly reachable, preventing the GC from cleaning up
the HTTPClientHandlers and the associated data they reference.

This resulted in a slow memory leak, which over a number of days consumed 800MiB
of RAM on the test server.

This commit refactors the timeout handling with a two pronged attack.  Firstly
the TimeoutTask object is a static inner class which will immediately nullify
its reference to the HTTPClientHandler.  Secondly a timer task is implemented
to call Timer.purge() every 5 minutes, this will expunge all cancelled tasks
from the TaskQueue.