refactor(peer) some _minor_ safety features

This PR cleans up the peer package, making it a tiny bit safer to use.

* All peers are created using Peerstore. It is no longer simple to instantiate a naked peer. To create naked peers, use the `mockpeer` package.

(This refactor was performed because of work #416 and a promise I made a long time ago)
Called it mock to emphasize that it should only be used for testing.

If you feel strongly about this, I'll change all callsites to `peer.NewPeerstore().WithID("foo")`, but this is a bit clumsy to use.

An alternative is to put the methods in the `testutil` package as...

``` go 
peer := testutil.PeerWithID("foo")
peer := testutil.PeerWithIDString("bar")
```