core/device: Make profile calls in GATT events
core/device: Make profile calls in GATT events

This patch correctly integrates all profile calls into the various GATT
client events (ready, service-added, service-removed) so that profiles
can perform the necessary updates. The major changes introduced in this
this patch are:

  1. Added new profile probe/remove functions for GATT services, which
     operate on a btd_device's client db and initialize btd_service
     instances with start & end handles:
        - device_probe_gatt_profiles
        - device_probe_gatt_profile
        - device_remove_gatt_profile
        - device_accept_gatt_profiles

  2. device_probe_gatt_profiles is called after service discovery on all
     profiles for new services and any stale services are removed from
     the profiles.

  3. device_accept_gatt_profiles is called to notify profiles of a new
     connection when the gatt-client becomes ready. This is call
     immediately after a probe, if the probe was done for a newly found
     service after a "Service Changed" event.

  4. device_probe_gatt_profile is called when a new GATT service is
     added to the db.

  5. device_remove_gatt_profile is called when a GATT service is removed
     from the db.

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