Additional torrent cache service, and various improvements.

I have made a few UI modifications related to windows positions.
Also I have noticed that you generate a new PeerInfo class every time the Update() function is called, and I believe this is unnecessary. So I have replaced the `Peers` ObservableCollection with an ObservableDictionary, where the PeerID is the unique key. This allow faster PeerInfo updating.

Also I have took advantage of PeerConnected and PeerDisconnected events, and I removed the additional loop that check for disconnected peers.