* Don't initialize components which have already been discovered (fixes#5588)
* Don't log that we've found a service unless we know it's not a duplicate
* Encode discovery data hash with JSON
This also solves the issue of trying to hash non-hashable objects like dicts
* Add test for duplicate device discovery