packet.h: New file describing packet data structure.

Just a sketch for now.
Created freelist.lua: general purpose freelist data structure.
packet.h: Extended and updated.

Added "fuel" field to packets. This is like the IPv4 TTL and will be
used to drop packets that are looping within Snabb Switch, i.e.
prevent switching loops within a snabbswitch from becoming
catastrophic.

Renamed packet_header to packet_info and packet.buffers to packet.iovecs.
Wrote packet.lua and rewrote buffer.lua. Not tested yet.

Packets and buffers are both allocated from freelists. Packets are
reference counted and buffers are not. Freeing a packet automatically
frees all of its buffers, so the only way to ref() a buffer is to
ref() the packet that owns it.
Added 'length' field to struct packet.
Contains the total length of all iovecs. For easy reference.
virtio.lua: I/O API now uses packets instead of buffers.
Not yet debugged/tested/compiled.
Packet support - small fixes.
Updated port.lua selftest to use packets for spam and echo.
virtio.lua: Fixes to packet support.
freelist.add() now errors on overflow.
virtio.lua: Fixed bug when reclaiming transmit descriptors.
Refactored to use the freelist module.
canary.lua: Simple old-fashioned heap corruption debugging tool.

Lets you place blocks of memory with well-defined contents -
"canaries" - around the heap and detect if they are overwritten.

selftest looks like this:

    $ ./snabbswitch -t canary
    Checking with live canaries..
    Checking with dead canaries..
    canary 'canary #1' died. Stomach contents:
    ff 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
    10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
    20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
    30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f

    canary 'canary #2' died. Stomach contents:
    00 ff 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
    10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
    20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
    30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
canary.h, canary.lua: Improvements.

Moving 'struct canary' into a .h file makes it easy to use inside C
struct declarations in other .h files.

canary.lua now marks exactly which bytes have unexpected values.
packet.h: Added missing semicolon.
virtio.lua: Implemented multi-buffer receive.
virtio.lua: Fixed a bug.
Now successfully echo'd a ping flood for 10 minutes.
There is a problem with multi-buffer packets.
Makefile: Fixed bug requiring "make clean" after modifying .h files.

Has been annoying me for ages. Turned out to be really obvious.
packet.lua: Error on allocation failure.
buffer.lua: Error on allocation failure.
intel10g, port, pci: Updated to use the 'packet' I/O API.

Debugging still needed.