IPv6 Support
In case users are on an ISP that assigns them an IPv6 address, rather than an IPv4 address, we need a way to handle the address space so that it can be stored and recalled later for moderation, or contribution searches against IPs.
IPv6 is a 128-bit address over IPv4's 32-bits, which firstly means that the database 'ipaddress' fields need to be altered to handle the extra characters. Further, validation needs to be able to handle both v4 and v6 addresses. Also, v4 addresses should now be stored and handled in v6 format so that we can make accurate comparisons when a mixture is used.
Updated for 4.0.0 Alpha 1. We now have the IP model, which is used to validate, format, and normalize IP addresses. It is used wherever the ipaddress field is saved, searched, or displayed.