Share same ThreadLocal for all decoder/encoders to minimize memory usage
Move drain logic to OutputMessageBuf and optimize it as far as possible