NAT detect

Adds in some methods that determine if you are behind a NAT when connecting to a remote peer. Also prevents connection to loopback addresses
@whyrusleeping this is still broken, I think. `omastr` is a full address, which is most certainly always not a prefix of `addr.String()`.