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).
When listening, and a connection gets started from the remote end, before we have received the public key (during handshake), we're in a state where the Conn exists but we do not have the peer.ID it will eventually have. Before, we were creating a peer with an empty peer.ID, but this is problematic because that peer instance may not be the final one and may be used incorrectly by other things (e.g. the Peerstore may have the peer in question, we just don't know which one it is (because we don't yet have the peer.ID))

I resolved that it was better to have the Conn not misrepresent the existence of a Peer before we know its peer.ID.