Provide universal API to create an SSLEngine

Motivation:

Althought 4cff4b99fd9bcaf256fa62699309e7beff8a136b introduced
OpenSslEngine and its helper classes, a user has to write two different
copies of SSL initialization code that does pretty much same job,
because the initialization procedure between JDK SSLEngine and
OpenSslEngine are different.

Modifications:

- Replace OpenSslContextBuilder with SslContext which provides the
  unified API for initializing SSL context
  - SslContext allows you to create a new SSLEngine or a new SslHandler
    with your PKCS#8 key and X.509 certificate chain.
- Remove OpenSslBufferPool in favor of SslBufferPool and add the option
  to allocate a direct buffer to SslBufferPool
- Rename OpenSslServerContext to OpelSslContext
- Add JdkSslContext which is a simple wrapper of JDK's SSLContext
  - The specified PKCS#8 key and X.509 certificate chain are converted
    to JDK KeyStore in instantiation time.
  - Like OpenSslContext, it uses sensible default cipher suite now.
- A user does not specify certPath and caPath separately anymore. He or
  she has to merge them into a single file.  I find this more logical
  because previously ca file's first entry and cert file were always same.
- Clean up SSL tests to demonstrate the advantage of this change
  - AbstractSocketSsl*Test now uses SslContext.new*Context() to
    configure both the client and the server side.  We did this only for
    the server side previously and had to use different certificates for
    JDK SSLEngine and OpenSslEngine, but not anymore.
- Add ApplicationProtocolSelector to ensure the future support for NPN (NextProtoNego) and ALPN (Application Layer Protocol Negotiation) on the client-side.

Result:

- Cleaner unified API for configuring an SSL client and an SSL server regardless of its internal implementation.
- When native libraries are available, OpenSSL-based SSLEngine implementation is selected automatically to take advantage of its performance benefit.

TODO: Update all our examples to use SslContext.newClient/ServerContext()