Fix IpAddress::toBulletMasked() for IP addresses with unmasked quadruplets with value zero
Rebuild the IPv6 masking algorithm to a proper parser handling the quadruplets
one-by-one, instead of attempting to process the IP address using regular
expressions.
This patch fixes masking of IP addresses such as:
2001:db8:1234:0:abcd::1234
Applying a /64 mask will transform the IP address into:
2001:db8:1234::
Note how the explicit 0 block is elided as well.
Previously the bullet masking algorithm would transform this into:
2001:db8:1234:••••:••••:••••:••••
Resulting in an IP address with just 7 quadruplets. Now it correctly returns:
2001:db8:1234:0:••••:••••:••••:••••