bluetooth: Do not check profile states is device_audio_is_ready()

The function is used to make sure some basic information has already
been gathered before the device is being used. At this point profile
states can be ignored, since their initial value will be
PA_BT_AUDIO_STATE_INVALID and thus effectively similar to
PA_BT_AUDIO_STATE_DISCONNECTED due to audio_state_to_transport_state().

The change should make no difference given that the behavior of
pa_bluetooth_device_any_audio_connected() doesn't change: by the time
TRUE is returned, a transport needs to exist. This means a profile
will exist in CONNECTING or CONNECTED state and thus the old
implementation of device_audio_is_ready() would also have returned TRUE.
bluetooth: Detect BlueZ 5

Check the existence of ObjectManager to detect the version of the
running daemon. If the interface exists, it should be BlueZ 5.
bluetooth: Parse the tree returned by ObjectManager

Parse the result of ObjectManager.GetManagedObjects(), which includes
all objects registered, their interfaces and the corresponding
properties per interface.
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: 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.