bluetooth: Add ports to the bluetooth sink/source

The bluetooth device should have ports so we can attach a latency to
the ports.

Every profile (a2dp, hsp...) has his own set of ports depending on the
number of sinks and sources it provides.
modules: Use pa_streq instead of strcmp.
bluetooth: Fix bluetooth.nrec property not updated

PropertyChanged signal of org.BlueZ.MediaTransport is processed in
pa_bluetooth_transport_parse_property() which updates t->nrec.
This is called by :
- First by filter_cb() of bluetooth-util.c
- Then by filter_cb() of module-bluetooth-device.c which retrieve value
  of t->nrec before calling parse function, then it checks if t->nrec
  has changed before updating bluetooth.nrec property.
  As t->nrec has alreday been changed during first process, property
  update is never performed.

This patch creates a new hook in pa_bluetooth_transport called
PA_BLUETOOTH_TRANSPORT_HOOK_NREC_CHANGED.
The hook is fired by bluetooth-util.c when the transport's NREC
property changes.
module-bluetooth-device.c won't listen the PropertyChanged signal of
MediaTransport anymore. Instead, it will use the hook in
pa_bluetooth_transport to get a notification when the NREC property
changes, and update the sink or source proplist accordingly.

const qualifier for returned pointer of
pa_bluetooth_discovery_get_transport() is removed.
bluetooth: Don't use the old socket IPC mechanism with BlueZ

This simplifies the code a lot, in favour of the D-Bus Media interface
in BlueZ. The old socket-based IPC mechanism has been deprecated and is
about to be removed soon.
bluetooth: Refactor property parsing code

Use a separate method to perform the common checks when a property needs
to be parsed.
bluetooth: Minor style fixes

Fix some minor style fixes to be consistent with the project coding
style.
bluetooth: Consider different input and output MTU

Previous implementation assumes these values are equal, but this doesn't
necessarily have to be so.
bluetooth: Avoid duplicating profile argument twice

The module module-bluetooth-device should never be given parameter
'profile' twice, even if both HFGW and A2DP are playing. This patch
proposed to consider HFGW first.
bluetooth: Replace deprecated ListAdapters()

The method ListAdapters() in org.bluez.Manager was deprecated in BlueZ
4.61, and is going to be removed in future releases. Instead, a property
was introduced for this purpose in BlueZ 4.22.
bluetooth: Replace deprecated ListDevices()

The method ListDevices() in org.bluez.Adapter was deprecated in BlueZ
4.61, and is going to be removed in future releases. Instead, a property
was introduced for this purpose in BlueZ 4.7.
bluetooth: Remove minor unnecessary check

The return value of dbus_message_iter_next() doesn't need to be checked
since the while condition will be false anyway (arg type will be
DBUS_TYPE_INVALID).
bluetooth: Minor style fix

Else clause should be in the same line as the closing brace.
bluetooth: Fix missing state checks for a2dp_source

Profile a2dp_source, just like any other card profile, should have
state guards when the profile is being changed. If the BlueZ interface
is not connected, the profile should be set to "off".
bluetooth: Fix bluetooth.protocol property

Property bluetooth.protocol did make a distinction between A2DP sink and
source roles but on the contrary did not separate HFP roles (headset vs
gateway). For consistency, they should both behave similarly.

This automatically fixes another incosistency: the HFGW (or HSP) sink
was set to bluetooth.protocol="sco", while the source was set to "hsp".
There is no use for this distinction, since the protocol (including the
role) is the same.
bluetooth: Don't force any profile on discovery module

Let device module figure out the priority based on the state of the
profiles.

Note that most likely all profiles will be in PA_BT_AUDIO_STATE_CONNECTED
state so 'Off' will be the initial profile then it is up to the policy
module to switch to the most suitable profile.
bluetooth: Remove commented out code.
bluetooth: Remove return value of bt_transport_config()

The function bt_transport_config() never fails so the code can be
simplified by just removing the return value.
bluetooth: Remove return value of setup_stream()

The function setup_stream() never fails so the code can be simplified by
just removing the return value.
bluetooth: Refactor parsing of signal PropertyChanged

Wrap the code parsing the PropertyChanged signal into a helper function
that will return the new state of the interface.
bluetooth: Refactor code to helper function

Make code more readable by introducing the helper function
bt_transport_is_acquired(). This also adds assertions to check whether
the internal state is consistent.