Add Announcer.forceAnnounce()
Add more closeable utility methods
Always create IO pool for HTTP clients

The previous behavior if JettyIoPool was not specified was to leave the
pool creation up to Jetty. This results in poorly named threads and
non-daemon threads. Instead, we always create one ourselves with properly
named daemon threads.
Use thread group for HTTP client threads
Fix unit tests to work around Jetty SOCKS bug

The Jetty HTTP client needs to be able to read the SOCKS response in a
single read call. We work around it by writing the response all at once.
Save error response body in FullJsonResponseHandler

If the server returns a non-JSON media type (which is common when an
server error occurs), the bytes of the response are available via the
new getNonJsonBytes() method. This allows seeing the error response
from the server which contain valuable information.
Make nanosSince() convert to most succinct unit
Improve response handling in FullJsonResponseHandler

The class has two new methods, getResponseBytes() and getResponseBody()
for returning the content of the response body. These are useful for
handling error responses from the server. The latter returns the body
as a String using the character set of the response's content type.

This also removes the previously added getNonJsonBytes().
Add AsyncResponseHandler