peer: added hex enc/dec
peer: added a PeerInfo struct

PeerInfo is a small struct used to pass around a peer with
a set of addresses and keys. This is not meant to be a
complete view of the system, but rather to model updates to
the peerstore. It is used by things like the routing system.
updated peer/queue + peerset
latency metrics
testutil: use crand for PeerID gen

RandPeerID generates random "valid" peer IDs. it does not
NEED to generate keys because it is as if we lost the key
right away. fine to read some randomness and hash it. to
generate proper keys and an ID, use:

  sk, pk, _ := testutil.RandKeyPair()
  id, _ := peer.IDFromPublicKey(pk)

Also added RandPeerIDFatal helper
kbucket now uses peer.ID