Rewrite packet handler interface so that packet handlers keep a list
of columns they can provide and take a list of columns to fill in when
parsing. Use this to only add used columns to the source rows.

Also remove some the unnecessary layering in packetq.h and remove the
broken first pass parse.

The DNS parser still extracts a lot of possibly unused information,
but just avoiding the creation and copy saves around 30% of the
running time on a simple 'select s, count(*) from dns group by s;'
query.
Use a std::vector instead of a string as key for the hash tables, this
means a dramatic improvement for numeric keys, and a slight
improvement for string keys
Inline default constructor in Variant so as not to require constructor
delegation (first available in GCC 4.7)
Rewrite string handling to use reference-counted strings to save copy
operations, remove column structs and use plain typedefs instead,
rewrite Variant so as not to mutate itself on access, rewrite accessor
so as to not go through pointer indirection, rewrite row allocation
computation (saving memory and a few percent speedup) and row
clearing, fix problem with resetting row values in the DNS parser.

The net result is about 40% less time spent in a "select src_addr,
count(*) from dns group by src_addr" query, there's at least one layer
of indirection gone, and the rules for who is responsible for string
deallocation are hopefully much clearer.
Merge branch 'master' of https://github.com/OleLaursen/PacketQ
Updated .gitignore.
Added support for VLAN-tagged ethertypes.
Remove debug printf
Merge branch 'master' of https://github.com/OleLaursen/PacketQ
Added checks for bad TCP and UDP packet lengths (which could cause
malloc requests for humongous amounts of memory...)
Added name lookup table for ip_version numbers (IPv4 and IPv6)
Removed unnecessary include
Added columns 'ip_version', 'hop_limit', and 'payload_len'.  Corrected
the name for the us column to be 'Microseconds' instead of 'Milliseconds'.
Re-ordered the IP field extraction code to process fields in packet order.
Fix problem with case sensitivity, finding unique column ops is case
insensitive but deciding which columns to include in input wasn't
Expand regression test to cover renaming column and renaming column to
same name with different case
Expanded the regression tests.
Added 2 new command-line switches: --verbose/-V and --tsv/-i.  Verbose
adds logging of pcap-file name, count and some timing information to
stderr while reading pcap-files, and the tsv option adds tab-separated
output.
Merged a fix from Ole.
Tweaked the error exit message to indicate the source of the message,
'packetq'.
Added a function subnet() which takes an IP address (v4 or v6) and
applies subnet masking with a given prefix mask length:

  subnet(src_addr, 24, 96)

for instance; where 24 is the prefix mask length for IPv4 masking
and 96 is for IPv6.