Improve matching against defined services
We're seeing the dbus-python binding resolve our well-known name to a
unique address and then sending requests to us using that. Because we
compare the destination address in the request against the names of the
multiple services we're supplying in order to route the message, that
failed.
If we don't match in that way, look for any service with an object that
matches the requested path, and which supplies the requested method
name, and interface if provided. If we can find one unambiguously,
assume that service name.
If that doesn't work well enough, we'll have to switch to opening and
managing multiple connections to the bus, which would be more
complicated.
While we're in here, adjust the logic for cases where no interface name
is provided, so that instead of assuming the first interface, try to
look for one which supplies the requested method, again succeeding only
when we find exactly one.