basic DNS support

currently it is more useful for multicast DNS as it does not support DNS string compression or DNS punycode, both of which are banned in mDNS.

also lacks types for the RData field of DNS Resource Records

I chose to expose a `serialize` function for DNS packets since they can be placed in the payload of either UDP or TCP, so we want the raw bytes.

serialization has been tested; parsing has not yet been tested.