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.
btw, AFAIR, this doesn't work: `t.Fatal` inside a goroutine. what i do is i usually setup a `chan error` and listen on it with the main thread.