[ipv6] Rework option handling and implement IPv6 fragment reassembly
gPXE will now traverse the list of extension headers in an IPv6
packet, rather than simply using the "Next Header" field of the IPv6
header. There are a lot of options that we can simply ignore for now
in gPXE, but they are ready for implementation.
The definitions of the extension header identifiers has been fixed to
use the correct values as well.
IP6 fragment reassembly is also implemented, with an adjusted
mechanism for checksum calculation to ensure the entire packet is
checksummed properly. The reassembly of fragments is essentially a
direct port from IPv4, with minor changes.
Signed-off-by: Matthew Iselin <matthew@theiselins.net>
Signed-off-by: Marty Connor <mdc@etherboot.org>