Reimplement ipv4 packet fragmentation

o) better documented (via comments)
o) clearer code

Fixes:
o) the packet must not be advanced by eth size before encapsulation;
o) ipv4 packet fragmentation now works when the original packet contained ipv4 options
o) the further fragmentation of previously fragmented ipv4 packets now works.