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.
shared/gatt: Implement "Write Long Values" procedure.

This patch implements bt_gatt_write_long_value.
shared/gatt: Implement notification/indication helper.

This patch implements bt_gatt_register, which sets up internal callbacks for
incoming notifications and indications, parses the PDU and provides it to the
upper layer. It also automatically sends out a confirmation when an indication
is received.