SplitDomainName handles non-FQDN labels correctly, doesn't return '.' in parts.

SplitDomainName would always include the '.' after each label segment. This was
inconsistent with the "." case (were it returned nil) and didn't seem too useful
since it required more processing to remove the '.' (like when building a
compression dictionary in Msg.Len() or Msg.Pack()). It also had issues with the
last segment, not including it in the split. It now returns all segments,
including the last, irrespective of the label being fully qualified.
A test has also been added to ensure no regressions.
Cherry-pick specific hunks
Get the testcases going
Changed TestLenCompress to use error inducing name

Long labels cause a packing out of bounds error. It is thrown at msg.go:268 in
the PackDomain function. It happens with messages of any construction (no RR
data, some RR data etc.).
Added packLen

packLen() returns the length of an uncompressed packet buffer, this
is used when packing a packet. This is needed for compression. When
compression is used, we first create the full packet and *then*
compress it. If we use Len() which accounts for compression, we can
get buffer overruns, when packing the (then still uncompressed) packet.
Revert "Fix length computation for TXT"

This reverts commit 795a69a6ec3415e61e7f3cf7b42342d6604528df.
Add all the compressible types to Len()

Len() now performs its duty, question is, *is* this now faster/better
than just packing a Msg, checkings its lenght and discarding the buffer.
Add benchmarking tests - Len() is ~4 times after then packing and getting a length from that
Fix TXT lenght again, but now it looks more right
Fix some typos
Print the actual error
Fix the nsec/3 length calculation

This overshoots, 'cause it only counts the windows, not the
actual bitmap sizes in the window. But it keeps the code
simple and fast.
Add compression serving benchmark-test
Merge branch 'compress'
Some TODO updates