Implement full validation of cookie hostnames.

This is based on the approach documented in Chrome's design documents:
http://www.chromium.org/developers/design-documents/network-stack/cookiemonster

We use Mozilla's publicly published TLD list, and compile the list with
gperf for fast, low-memory lookups. Low-memory ought to be taken with a
grain of salt, however, given that it adds about 1.2 Mb of read-only
data to our __TEXT segment.

This unfortunate amount of complexity is required to work around the
constraints of NSHTTPCookieStorage, which enforces its use as a
user-wide (or in the case of the app store, app-wide) cookie store.