pxe: revamp timeout, improve the unloading of gpxelinux
Revamp the timeout mechanism, to deal with UDP stacks (like gPXE!)
which lose transmit packets. gPXE, in particular, will drop a UDP
packet if it doesn't have the recipient in the ARP cache.
Furthermore, it has the poor taste to not even send back an error.
Also, always unload gPXE when present, before exiting. This should
let us clean up low memory better. Reconsider if this turns out to be
too slow.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>