shared/gatt: Introduce gatt-helpers.h skeleton.

This patch introduces the skeleton for src/shared/gatt-helpers, which defines
helper functions for over-the-air GATT client-side procedures that will be
frequently used by clients. Most of these functions require several sequential
ATT protocol requests and it is useful to abstract these details away from the
upper layer.
shared/gatt: Implement bt_gatt_exchange_mtu.

This patch implements the helper function bt_gatt_exchange_mtu, which performs
an ATT "Exchange MTU" request and resizes the internal buffer based on the
result.
shared/gatt: Implement "Discover All Primary Services" procedure.

This patch implements bt_gatt_discover_primary_services for the case when no
UUID is provided.
shared/gatt: Implement "Discover Primary Service by UUID" procedure.

This patch implements bt_gatt_discover_primary_services for the case when a UUID
is provided.
shared/gatt: Implement "Characteristic Discovery" procedures.

This patch implements bt_gatt_discover_characteristics, which can perform the
characteristic discovery procedures "Discover All Characteristics of a Service"
and "Discover Characteristics by UUID".
shared/gatt: Implement "Descriptor Discovery" procedure.

This patch implements bt_gatt_discover_descriptors.
shared/gatt: Implement "Read" procedure.

This patch implements bt_gatt_read_value, which can be used to read the value of
a characteristic or descriptor.
shared/gatt: Implement "Read Long Characteristic Values" procedure.

This patch implements bt_gatt_read_long_value.
shared/gatt: Implement "Write Value" and "Write Without Response" procedures.

This patch implements the bt_gatt_write_without_response and bt_gatt_write_value
functions.