[FLINK-971] Configure PooledByteBufAllocator in NettyConnectionManager instead of using the default allocator

Configuration:
    - 0 heap arenas,
    - n direct arenas (where n = num incoming + num outgoing network IO threads), and
    - bufferSize << 1 bytes page size.

Additionally, OutboundEnvelopeEncoder directly implements ChannelOutboundHandlerAdapter instead of the
MessageToByteEncoder<Envelope> wrapper to have tighter control of memory allocations.

This closes #38.