Tighten up DNSName.from_pack() & set_from_dot_name()

DNSName.set_from_dot_name() : Clear out the internal s_pack if setting a
name from the dot_name format. Previously the get_size() function
wouldn't return the right value as the presence of s_pack takes
priority.

DNSName.from_pack() : Eliminate code duplication by changing the while
loop into basically a do-while. Add a raise error for the case of a
pointer outside of the given packet.
Rename *from_dot_name() to *from_name()

Originally _dot was there to distinguish from _octal as in
mail.google.com vs 4mail6google3com0 but from_pack made more sense
once passing in the entire packet and giving the starting offset.
Move s_pack original packet storage to DNSRaw class.
Support reading resolv.conf if server not provided.

Also possibly support talking with DNS servers over IPv6 (untested)