Move duplicated code into CodecUtil

Motivation:

We have some duplicated code that can be reused.

Modifications:

Create package private class called CodecUtil that now contains the shared code / helper method.

Result:

Less code-duplication
Add io.netty.noJdkZlibEncoder system property

Related issue: #2821

Motivation:

There's no way for a user to change the default ZlibEncoder
implementation.

It is already possible to change the default ZlibDecoder implementation.

Modification:

Add a new system property 'io.netty.noJdkZlibEncoder'.

Result:

A user can disable JDK ZlibEncoder, just like he or she can disable JDK
ZlibDecoder.
Check noJdkZlibEncoder before comparing other parameters

.. for consistency
Add proxy support for client socket connections

- Remove unused dependencies from POMs
- Add ProxyHandler and its implementations
Implement ProxyHandler.connectFuture() / Implement ProxyConnectionEvent / Implement connect timeout / More robust failure management
Add finals
Add more information to ProxyConnectionEvent
Fix silly NPE
Checkstyle / cleanup
Nicer exception messages
Move up AUTH_NONE
Do not call ctx.name() multiple times
Use HTTP/1.0 / Add Host header if possible
When sending the init request to SOCKS5 server, send the list of all supported authentication scheme, rather than the expected one only.
Fix incorrect initial request (again)
Add tests for SOCKS4a/5/HTTP/HTTPS proxy connection

- Modify Socks[45]CmdResponseDecoder so that it does not remove itself from the pipeline, because the removal must occur *after* the decoded response message is passed to the next handler.  If we remove the decoder in decode(), the data received from the destination will be forwarded *before* the decoded response.
- Implemented SOCKS4/5/HTTP proxy servers for testing purpose
- Implemented a parameterized test which runs a set of test scenarios
Add netty-handler-proxy to netty-all
Simplify TestItem
Simplify
Remove redundant comments