Split PACKET_RECYCLE() into PacketInitialize() and PacketCleanup().

This allows doing the cleanup step before freeing a Packet and then
the initialize step when allocating a packet. This is better for
caching.
Remove Packet structure pkt member, use p + 1 instead.

The uint8_t* pkt pointer member of the Packet structure always
points to the memory after the Packet structure, which can be simply
calculated as p + 1, instead of storing an 8 byte pointer.

Most of the changes is cleaning up unit tests.