Fix for a socket leak in OkHttp on Android

See updated commit comment.

This has been changed so it uses a new strategy and does not introduce a new API.
AFAIK, I could not use a ScheduledExecutorService because he implementations available do not shrink, and we don't want any threads staying alive and pooled indefinitely.
For simplicity I changed the ThreadPoolExecutor to act an Executor, and only use execute() once - the runnable only terminates when it is done, rather than rescheduling itself as I had before.

Some tests have been re-written, and some test-only methods added to ConnectionPool to make the tests more obvious and deterministic.

Neat. If we really wanted to go wild with this, `performCleanup` could return the delay until the next necessary eviction.

I don't think we're there yet.