Peerstore Fix

This PR changes Net, Swarm, SecurePipe to take a Peerstore.
Whenever they interact with a new peer (say, an incomming conn,
or by somebody calling Dial), it adds the given peer to the Peerstore.

This should fix the problem where peers are at some point given to the
network and/or dht that are not in the peerstore at all. (this panics
atm, to find bugs).
Yeah, I added that test case because I could be Dialing to a peer1 and then i receive back peer2's pubkey, and thus am like wat!? (note that if this is an incoming connection, peer is ErrNotFound above, and returns beforehand. Did prompt me to find a bug though (if `peers.Get` returns `nil, nil`, we'd panic).