Correctly parse remote address

Use net.SplitHostPort to extract the host from (*net.Request).RemoteAddr,
rather than the naive string split, which fails on IPV6 addresses. If
net.SplitHostPort fails, use the raw value of (*http.Request).RemoteAddr for
the address field of log lines.

Test cases for IPV6 are added, with and without a port specified.