bluetooth: Support ObjectManager interface add/remove

Install matches for signals ObjectManager.InterfacesAdded and
ObjectManager.InterfacesRemoved, and process the devices that are
registered and unregistered dynamically.
bluetooth: Support Properties.PropertiesChanged signal

Install matches for signal Properties.PropertiesChanged and process the
properties corresponding to the tracked devices.
bluetooth: Add HFP 1.6 codec ID

According to the HFP 1.6 spec, the default codec (CVSD) has ID 0x01.

This change has no effect in older versions of BlueZ since the codec ID
was ignored for HFP, due to the fact that HFP versions prior to 1.6 do
not have such a field.
bluetooth: Handle transports configured before UUID received

Now that the transport can be configured from some other process (i.e.
oFono), there is no guarantee that the UUID from BlueZ will already have
been received.

This requires PulseAudio to assume that the UUID is actually supported
by the device and that BlueZ will eventually propagate it.
bluetooth: BlueZ 5 interface rename to org.bluez.MediaEndpoint1

Use the new interface name if BlueZ 5 has been detected.
bluetooth: BlueZ 5 interface rename to org.bluez.Media1

Use the new interface name if BlueZ 5 has been detected.
bluetooth: BlueZ 5 interface rename to org.bluez.MediaTransport1

Use the new interface name if BlueZ 5 has been detected.
bluetooth: Parse media transport's properties

Consider the media transport when a PropertiesChanged signal is
received.

Note that the transport might have an owner other than BlueZ, and thus
the property changes would be emitted from arbitrary senders. For
performance reasons, the installed match considers the interface name
where the property has changed.

It could be possible to install and remove the D-Bus matches dynamically
when a new owner is registered/unregistered, but filtering based on the
interface name seems good enough already.
bluetooth: Support media transport's State property

BlueZ 5 exposes a 'State' property in the media transport interface.
With regard to PA, this replaces the profile-specific interfaces, since
they were being used to know if the audio was streaming or not.
bluetooth: Update to new BlueZ 5 transport acquire/release API

The new D-Bus API doesn't support access rights, which weren't used by
PulseAudio anyway, but it does solve a race condition: now optional
acquires can be implemented by bluetooth-util atomically using the D-Bus
TryAcquire() method.
bluetooth: Support transport auto-release

With BlueZ 5, if the remote device suspends the audio, the transport
state will change to "idle" and the endpoint is not required to release
the transport, since this could introduce race conditions. Therefore,
ignore the call to pa_bluetooth_transport_release() if the transport is
not acquired any more.
bluetooth: Update to new property setter API in BlueZ 5

If BlueZ 5 is in use, the standard org.freedesktop.DBus.Properties needs
to be used instead of the old SetProperty() method.
bluetooth: Update to volume control in BlueZ 5

In BlueZ 5, the microphone and speaker gains are exposed as properties
of the MediaTransport1 interface.
bluetooth-FIXME: Split headset ports

Logically revert 40329acc1a28145643e49207e9d65cd05bbda2c8 to avoid
an issue with shared ports already existing when a late UUID is
announced.