IPv4: fix the header length calculation

By convention we have a single header buffer containing ethernet/IP/TCP...
and a list of payload fragments. When we calculat the IPv4 header length
we must sum the length of the payload fragments *and* the length of everything
in the header buffer except the ethernet header length.

This fixes the bug where TCP headers appear to be missing in wireshark;
they are actually present on the wire but the parser is obeying the IP
header length field and truncating the packet before display.