Use bsparser in order to simplify the Packable parsing
New FQDN type and use of BSParse

Since we are sending request through the network, all the request are
encoded in a FQDN query. This patch force the user to validate the
domain FQDN before sending a query.

This also for the user to write a parser for Packable and for
Encodable. This change allows us a better error handling when parsing a
query and make the unpack/decode easier to write.
Improve error handling

export functions to make Dns/DnsIO easier to manage and compose

also export new functions to send FQDN queries and to not let the
default queries guessing how to encode the FQDN.
Add a unpackData to unpack Packable