Split IP address and hostname storage up.

Descriptors will keep track of both the hostname and the IP address
separately so that the IP address is easier to pass around to code that
wants to use it.