Add the previously-untested edge cases:
- port: 0 prefers 4096 when free
- port: 0 falls back to a random port when 4096 is taken
- mDNS is skipped on loopback hostnames
- mDNS publishes on non-loopback hostnames and unpublishes on stop(true)
- mDNS unpublishes on graceful stop() via the scope finalizer