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.
Oops, I did a typo when testing this in the local codebase... Sorry about that.

Yeah, your suggestion with the variables is much better, thanks. With the suggested changes, the following still validate:

- http://example
- http://example.
- http://1.1.1.1.1
- http://123.123.123
- http://3628126748
- http://123

As far as I know, numeric-only domain names are not valid. Should we filter them out? Then we'd be left with only those two:

- http://example
- http://example.

Whether or not we should consider those valid or not is debateable.