it seems strange that we only `retain()` the "top level" `HAProxyTLV` objects. For example wouldn't you also expect all the `((HAProxySSLTLV) haProxyTLV).encapsulatedTLVs()` added below to be released too? The call to `encapsulatedTlvs.add(haProxyTLV);` below doesn't account for `retain()` either. It may be more strait forward to do a retain (e.g `readRetainedSlice()` or `retainedSlice()`) in `readNextTLV` when ever we get the "raw content" (for `HAProxySSLTLV` and `HAProxyTLV`)