IPAdd adds `val` to `ip`.
If `ip` is IPv4 address, the value returned is IPv4, or nil when over/underflowed.
If `ip` is IPv6 address, the value returned is IPv6, or nil when over/underflowed.
IPDiff calculates the numeric difference between two IP addresses.
Intuitively, the calculation is done as `ip2 - ip1`.
`ip1` and `ip2` must be the same IP version (4 or 6).