shared/gatt-client: Make service discovery more modular.
shared/gatt-client: Make service discovery more modular.

This patch makes the existing service discovery procedures more modular by
making the following changes:

  - Don't accumulate the discovery results in struct bt_gatt_client's internal
    service list. Instead, accumulate them inside struct discovery_op and assign
    them to bt_gatt_client during completion.

  - Add a completion callback to struct discovery_op which gets called at the
    end of a discovery operation. This allows discovery ops triggered for
    different reasons (e.g. init vs "Service Changed") to process discovery
    results separately.

pstglia/external-bluetooth-bluez,mapfau/bluez,mapfau/bluez,ComputeCycles/bluez,silent-snowman/bluez,silent-snowman/bluez,pkarasev3/bluez,ComputeCycles/bluez,pkarasev3/bluez,mapfau/bluez,silent-snowman/bluez,pkarasev3/bluez,pstglia/external-bluetooth-bluez,pstglia/external-bluetooth-bluez,pkarasev3/bluez,mapfau/bluez,silent-snowman/bluez,pstglia/external-bluetooth-bluez,ComputeCycles/bluez,ComputeCycles/bluez