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.