Fixed #20003 -- Improved and extended URLValidator

Another attempt at fixing issue 20003, as it was previously attempted in #998.

This adds support for user:password in URLValidator supported URLs.

Additionally, the test suite has been improved by adding test URLs from
http://mathiasbynens.be/demo/url-regex (with a few adjustments, like
allowing local and reserved IPs).

The previous URL validation RegEx failed this test suite on 13
occasions, so I also updated the URLValidator based on
https://gist.github.com/dperini/729294 to correctly validate all URLs in
the test suite. Among other improvements, this also adds support for
IPv4 mapped IPv6 addresses like `::ffff:192.0.2.128` and support for
unicode domain names.

Docs have also been improved.
That regex will not validate the following:

- http://1337.net

It will validate the following:

- git://-invalid.com
- http://example
- http://example.
- http://.com
- http://invalid-.com
- http://-invalid.com
- http://invalid.com-
- http://inv-.alid-.com
- http://inv-.-alid.com
- http://.
- http://..
- http://../
- http://-error-.invalid/
- http://-a.b.co
- http://a.b-.co
- http://.www.foo.bar/
- http://.www.foo.bar./

Any other opinions on this? I could live with a simplified version, but we would really need to make clear that if an URL is not invalid according to the URLValidator, then it is by no means guaranteed to be a valid URL (e.g. `http://.` is quite an extreme example). I think I'd prefer the extended RegEx though. The test suite is quite big, I can't think of any other edge cases (which of course doesn't guarantee that there aren't any.)