Much faster discovery

See #144 for comments

This builds on #141

Since each zone_player maintains (the same) topology info, we do not need to send the SSDP discovery packet to all ZPs. All we need is for one ZP to respond to our query, and we can then get the topology info from that player.  It turns out that this is *much* faster (by a factor of 10 on my system) than the existing discovery method. 

Since there is much less delay involved, there is no reall benefit in returning a generator, so this version returns a set of all visible zones instead. This should cause no problems for existing code. 

Also adds 
- an `include_invisible` parameter to `discover`, in case you want to obtain the bridges etc instead.
- a `timeout` parameter. If no zones are found within `timeout` seconds, returns None