Add "random" `PeerId` generation

This should cover most of the use cases. According to the Bittorrent
spec, it's only really necessary for this to be unique for each process
on a machine, so this should handle it as we're using the PID.

That being said, it's a real shame we're using the PID, because we just
dropped Windows compatibility completely.
Clean-up the `Peer` module, using `Functor`

This uses `<$>` (i.e. `fmap`) instead of `liftM` to lift a function over
the `Get` monad/functor.