do not print stacktrace on SocketTimeoutException

This can happen frequently, so no need to pollute the log.
Add support for HTTPS

Added an optional makeSecure() method you can call before start() to serve
over HTTPS instead of plaintext HTTP
Allow hostname binding for SSL
Switch makeSSLSocketFactory() to use default system KeyStore type.

Rather than hardcoding JKS as the KeyStore type makeSSLSocketFactory() should
use the system default. Android does not ship a JKS KeyStore provider but the
BouncyCastle BKS format will work fine.
makeSSLSocketFactory method that accepts preloaded KeyStore/KeyManagerFactory

The existing makeSSLSocketFactory() method only supports loading a KeyStore
from a classpath relative file using a provided passphrase. An additional
makeSSLSocketFactory added in this commit allows the caller to provided a
preloaded KeyStore/KeyManagerFactory. This can be used by callers that have a
KeyStore/KeyManagerFactory loaded in memory, or from an arbitrary InputStream
not on the classpath.
makeSSLServerSocketFactory method that accepts a KeyManager array

The other makeSSLServerSocketFactory method accepts a KeyManagerFactory which
it retrieves an array of KeyManagers from. It is cumbersome to wrap the
KeyManagerFactory but easy to wrap KeyManagers individually. Supporting
callers providing their own KeyManagers allows for more advanced keystore
management.
use older IOException() to support Android < 9 (i.e. 2.3)

IOException(Throwable) was not added until android-9, so use
IOException(String) instead.