shared/gatt-client: Added initial skeleton and simple functions.

This patch introduces shared/gatt-client, which provides a central/client side
implementation of the Generic Attribute Profile. An instance of bt_gatt_client
will provide a central database of all GATT services, characteristics, and
descriptors that have been discovered on a peripheral and will provide API
functions to obtain information about discovered attributes, registering
handlers for "Service Changed" indications, as well as providing
reference-counted access to "Client Characteristic Configuration" descriptors.
shared/att: Support multiple disconnect handlers.

This patch adds support for registering multiple disconnect handlers with an
instance of struct bt_att. Unregistering is achieved via a new function AND
through bt_att_unregister_all and all disconnect callbacks get automatically
unregistered after a single disconnect event.
shared/att: Add BT_ATT_DEFAULT_LE_MTU macro.

Moved the ATT_DEFAULT_LE_MTU to att-types.h to make it public.
shared/gatt-helpers: Fixed typo in callback args.

Fixed a small typo in one of the callback arguments.
shared/gatt-client: Add bt_gatt_client_set_debug.

Added the bt_gatt_client_set_debug function, which sets up a callback to be used
internally by util_debug.
shared/gatt-client: Implement initial service discovery.

This code implements the following portion of attribute discovery:

  - Initial MTU exchange.
  - Primary service discovery.

Discovery results aren't stored yet.
shared/gatt-client: Add service iterator functions.

This patch introduces high-level structures and functions for iterating through,
and storing, data about the discovered services.
shared/gatt-client: Implement characteristic discovery.

This patch implements characteristic discovery as part of the client
initialization flow. The characteristics of each service are discovered in
order.