DHT PR

This PR will be for CR and conversation on the DHT.
toom me a bit to understand what was going on here. Maybe let's abstract this out into a `func (d* IpfsDHT) cleanExpiredProviders()` (and presumably `cleanExpiredListeners` too)