Enhancement: Add support for hostnames (and more robust IP checking, too!)

This fully addresses #105.
Unfortunately, if we were to distinguish parsing from failed binding, it would affect the validity of all of the prior tests, because RFC1123 is actually quite lenient in what constitutes a hostname. For example, "10.0.blam.20" is technically valid (and may even be used, since a user might have it on their search domain -- "10.0.blam.20.domain.com")