attrib: Avoid passing raw PDU to read characteristic by UUID

By centralizing the PDU parsing and validation internally to GATT API,
the callbacks become simpler.
attrib: Fix coding style for various enc_*/dec_* functions

Fix coding style for enc_read_blob(), enc_read_blob_resp(),
dec_read_resp(), enc_error_resp(), enc_find_info_req(),
enc_find_info_resp() and enc_prep_write().
attrib: Remove unused parameter from enc_write_resp()
attrib: Add decode prepare write support

Add function for decoding Prepare Write Request PDUs.
attrib: Add encode prepare write support

Add function for encoding Prepare Write Response PDUs.
attrib: Add decode execute write support

Add function for decoding Execute Write Request PDUs.
attrib: Add encode execute write support

Add function for encoding Execute Write Response PDUs.
attrib: Run callback with the partial result of characteristic discovery

Callbacks should check for status equal to ATT_ECODE_ATTR_NOT_FOUND to
ensure that the characteristic discovery has finished.
attrib: Reduce scope of variable declarations in char_discovered_cb()

This makes it easy to identify where variables are being used.
unit: Add test for gatt_exchange_mtu()

The new unit/test-gatt.c file will contain tests for GATT API
implemented in attrib/gatt.{c,h}.
unit: Add test for gatt_discover_primary()
unit: Add test for gatt_discover_char_desc()
unit: Add test for gatt_write_cmd()
unit: Add test for gatt_write_char()
unit: Add test for gatt_read_by_uuid()
unit: Add test for gatt_read_char()
unit: Add test for long read at gatt_read_char()
unit: Add test for gatt_discover_primary() (by UUID)
unit: Add test for long write using gatt_write_char()
unit: Add test for gatt_discover_char()