update peer url

I don't like that this flow is so different to `Add()`. In there we are relying on m to have valid PeerURLs (since the unmarshalling should catch that), and we use Sprintf instead of path.Join... etc. Can you consolidate or at least standardise the two?