Rebuilt auto hyperlink parser to make it smarter(?).

Notable changes:

* The return value of matches is now an array. Index 0 is the range in the scanned string. Index 1 is the URL from the scanned string. The URL returned can be different than the string that is matched by the range. This is because special URLs such as those missing a scheme will have the scheme (e.g. http://) prepended to make them valid. This is the value returned.
* Flimsy URL scheme matching is no longer used when calling “URLWithProperScheme:” to get a URL with prepended scheme when needed. This call instead now uses the internal parser to parse the given URL and prepend based on the actual parser status instead of traveling across an array of known schemes.
* The TLD expression introduced in c3b48752ed17f1c6cd7ec6ef929cde241c3f4ed2 has been updated to not count forward facing periods. Just the TLD itself.

The commit is considered unstable, but everything appears to work as expected. There should not be any change in behavior from previous versions. The difference is in how the data is actually handled. Hopefully more reliably now.