TLS Server Name Indication(SNI) support (reworked)

This patch added support for SNI detection. Now your Netty server could host multiple certificates and serve client with proper one. 

Usage:

``` java

// application wide
SniHandler.Builder builder = new SniHandler.Builder();

builder.addContext("*.avoscloud.com", sslcontext1)
  .addContext("*.leancloud.cn", sslcontext2)
  .defaultContext(sslcontext1);

// in the ChannelInitializer

pipeline.addLast(builder.build());

```

This handler detects SNI extension, then adds proper SslHandler to the pipeline. 

In Java 8 SNI is supported in JDK, but this handler is going to enable SNI support for all Java versions.

You may check #3020 for previous discussions.
I think the issue it is generally not safe to make assumptions about how the users's pipeline will be configured, and the contents of the buffer you are receiving. You are right that the SSL handler related stuff is typically first in the pipeline, and typically the first thing to happen during a connection, but who knows...it is possible to have a more elaborate pipeline setup.