checksum: add padding for odd number of bytes
checksum: test checksum with repeated roundtrip property

Arbitrary instances for TCP and UDP simply set it to zero. Since the
marshal code recompute the checksum, the 0 value will not be preserved
and the roundtrip property will fail.

A simple way to get around this is to marshal and unmarshal a TCP or UDP
packet once, which will set the chksum field to the proper value, and
then check that the roundtrip property holds on that packet.
checksum: make pseudo header construction its own function