Introduce RemoteCollection.Rename.

Ready to merge on sight!
Can't we drop the delegate signature? meaning, wouldn't something like this below work?

```csharp
repo.Network.Remotes.Update(repo.Network.Remotes["origin"],
                    r => r.FetchRefSpecs = new[] { "+refs/heads/*:refs/remotes/upstream/*" });
```