core: Add gatt_device_remove()

This function will clean up all the references that the gatt core may
have of a device.
gatt: Fix crash when removing a device

When the device is removed we should also remove the IOChannel
watches to avoid them to be called after the device is removed.
gatt: Remove memory leaks

When diassociating a device from the gatt core, we should also
unregister all the dbus interfaces related to that device.
proximity: Remove old Immediate Alert service
IAS: Move D-Bus signal emit code to a separate function
IAS: Only emit property changed D-Bus signal if alert value changes
IAS: Use error() for invalid characteristic value
IAS: Emit "none" alert level if monitor/locator writes invalid value
gatt: Use correct GATT write operation based on characteristic properties
gatt-service: Implement write support
FIXUP: gatt-service: Implement write support