[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.