gatt: Add Generic Access/Attribute Profile plugin

Initial patch to create GATT based plugin to handle Generic Access,
and Generic Attribute Profile services. GAP characteristics discovery
will be moved from device.c to this new plugin.
gatt: Add GAP/GATT device registration

This patch adds GAP/GATT device driver probe function and the skeleton
of the register GAP/GATT device function.
core: Add device method to access "Appearance"

This patch adds a new device method to access the Appearance GAP
characteristic value stored previously as result of the discovery
procedure or GATT characteristic read procedure.
gatt: Add read Appearance characteristic

This patch registers the ATTIO callbacks, and triggers the Appearance
characteristic read by UUID when the ATT connection is established (if
appearance value is not found in the storage).
core: Remove Appearance characteristic read

This patch removes the Appearance characteristic read from the core.
Appearance characteristic is now being read by the GAP/GATT plugin.
gatt: Emit PropertyChanged for Appearance

Emit PropertyChanged changed signal in the Device hierarchy when the
Appearance characteristic value is read from the remote GAP service.
core: PropertyChanged signal for Icon/class

This patch emits the PropertyChanged signal in the Device hierarchy when
the remote device class is updated.
core: PropertyChanged signal for Icon/Appearance

This patch emits the PropertyChanged signal in the Device hierarchy when
the remote device Appearance characteristic is read. In general
Appearance is a static value, if the device doesn't expose the
Appearance value in the advertising data, the GAP plugin should read the
value using GATT read procedure.
core: Add storing Appearance

This patch stores the Appearance characteristic value read from the
remote GAP service.
gatt: Map Appearance value 0x0000 to "unknown"

According to Bluetooth SIG Assigned numbers, Appearance characteristic
value 0x0000 is designated to "unknown".
gatt: Add Service Changed read

This patch implements the Service Changed GATT charateristic value read.
Force reading the value is necessary while Service Changed value handle
is not stored. Indication can be lost since it is the first data sent
from the GATT server when the connection is established, and the client
may not be filtering the ATT indications.
gatt: Add Service Changed CCC discovery

This patch adds the Client Characteristic discovery of the Service
Changed Changed characteristic.
gatt: Enable indication for Service Changed

This patch enables indication of the Service Changed characteristic
setting the indication bit in the Client Characteristic Configuration
descriptor.
gatt: Confirm the indication received

This patch adds the ATT command reply for the Service Changed
indication value received.
gatt: Start Discover Services when handle changes

This patch starts the Discover All Primary services when a Service
Changed indication is received or the Service Changed characteristic
value is read.
core: Rename update_services

This patch renames update_services functions to avoid clashing with GATT
based services.
core: Add updating GATT services

This patch adds the functions to manage Profiles added, and removed
after a Discover All Primary Services procedure.
gatt: Primary service interval may not change

This patch address the "Service Changed" scenario on which the start
and end Primary Service attribute handle interval doesn't change.
core: Rename services_changed to uuids_changed

This patch renames the services_changed function to uuids_changed to
avoid misinterpretation. "Service Changed" expression is used to refer
to a GATT operation used to notify clients that a given attribute range
in the GATT server is not valid anymore.
gatt: Add MTU exchange procedure

GATT Exchange MTU is a procedure defined by the Generic Attribute
Profile, it is not related to the remote GATT primary service. However,
gatt plugin is the most suitable place to manage this procedure.