Walk code, by Chris Dance (codedance).
Added IPv6 parsing support.

Note: I personally think we should be returning an IP{} type rather than
a string, but I don't want to break the external API.