shared/gatt-db: Add high-level functions for client

This patch introduces foreach functions to gatt-db for enumerating
service, characteristic, and decriptors stored in the database as
gatt_db_attribute pointers. This patch also adds functions for
extracting service, characteristic, and include declaration data out of
matching attributes.

This is in preparation for using gatt-db as the attribute cache in
shared/gatt-client.
shared: Add function to insert element after entry

This patch adds queue_insert_after, which inserts the given "data"
after the first occurence of element "entry" in a queue.
unit/test-queue: Add /queue/insert_after test

This tests the queue_insert_after function.
shared/gatt-db: Add gatt_db_insert_service function

This patch adds the gatt_db_insert_service function which inserts a
service with a pre-defined handle into the database if the desired
handle range is available.

This is primarily meant to be used by gatt-client, since the handles
in a client database need to perfectly match those returned from a
remote server. This also allows client to handle "Service Changed"
events in which a newly found service can be inserted at the correct
location within the database.
shared/gatt-db: Add clear functions

This patch introduces gatt_db_clear and gatt_db_clear_range functions
for removing services from the database.
shared/gatt-client: Store services in gatt_db.

This patch rewrites the service discovery logic inside
shared/gatt-client. The internal service_list structure has been
entirely removed and services are stored in a gatt_db instance.
Initially, gatt-client creates and owns the life-time of the gatt_db.
shared/gatt-client: Use gatt_db in bt_gatt_register_notify

This patch rewrites the notification/indication logic in gatt-client to
use the internal gatt-db.
tools/btgatt-server: Add the "services" command

This patch adds the "services" command which displayes the currently
stored services in the server database.
tools/btgatt-client: Use gatt-db instead of iterators

btgatt-client now iterates services, characteristics, and descriptors
of the shared/gatt-client using gatt-db instead of the iterators.
unit/test-gatt: Use gatt-db for CLIENT tests

This patch rewrites parts of unit/test-gatt that verify the contents
of a shared/gatt-client to use the client's gatt-db instead of the
service iterators.
shared/gatt-client: Remove GATT structs and iterators

This patch removes the high-level structs and iterators used by
shared/gatt-client in favor of gatt-db.