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
can do bytes prefix. also, this wont work exactly, because the remote address will include the port, which in dial-out connections will differ. We need to split off the IP part, and compare based on that. 

(This might warrant a `(m *multiaddr) Subaddrs() []Multiaddr` method that:

```
/ip4/1.2.3.4/tcp/4001/ip4/2.3.4.5/tcp/4001
-> [](/ip4/1.2.3.4, /tcp/4001, /ip4/2.3.4.5, /tcp/4001) (4 subaddrs)
```