The Peer is Dead. Long live the ID

This PR is a massive refactor, removing peer.Peer
everywhere and using peer.ID instead. This refactor
also revealed a number of bugs throughout that i
fixed. Sadly, i'm sure i'll introduce some-- this is
a pretty large refactor. The upside is that everything
is saner when it comes to peers and the peerstore.
They **feel** much better now.

Note: I will squash most of this PR so that it is
bisectable.


@maybebtc @whyrusleeping could use CR. multiple eyes
looking over it would be ideal.
why a `PeerInfo` rather than `peerstore.Addresses(pid)`?