IPv6 support roadmap

Usage
Although the global transition to IPv6 is coming very slowly, it will be necessary to support the new IP format in the future. MediaWiki will require changes to IP.php and some of the block/checkuser code. Possible schema changes are likely to get the indexing to work well in the future.

Current code
A number of functions have been added for IPv6 support for blocks:
 * - expands IPs and set them to all-caps
 * - creates an IPv6 octet from an integer

Additionally, there a some new validation functions which use some IPv6 validation regexps:

Some of the current functions for IPv4 now check for IPv6 IPs and return output from the correct function if an IPv6 IP is given. Additionally, the IPv6 ones all avoid the use of native bit functions and operations due to their 32 bit limits. Using them will cause garbage or invalid output.

Todo

 * More unit tests!
 * Deal with proper CIDR defaults for blocks

Normalization/storage issues
As of MW 1.11, all user and user talk page for IPv6 IPs are normalized. This is due to the fact that given user of upper/lower case, '::' usage, and other permutations, there are many different ways to represent the same IP.

For consistency,  should be used when storing and checking against IPs in the database. This function expands "::" abbreviations, removes leading bloc zeroes, and sets to all caps IPv6 addresses (other addresses or strings are return as is).

However the issue of indexing and performance remains. Currently, we have:

In tables.sql.

This is problematic as IPv6 addresses, when padded out, are 32 characters, rather than 8 for IPv4. This partial index will likely be fine for a long time, as there are few range blocks, usually they are not permanent, and few are IPv6.