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)
How about if we decide to go the persistence route, I'll nominate myself to do the dirty work?

(datastore impl about 50 lines of superfluous unmarshalling, type casting, and error checking)