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.
The infinite loop in a goroutine, that goroutine wont ever exit. which i *guess* is okay for tests, but they do build up when you do `go test ./...`