bluetooth: Add support for registerRFCOMMServiceByUUID

This will create a service handler (in BlueZ terms, a socket listening on
an RFCOMM channel and a SDP record identifying this service), which has a
callback that will be called when a remote device connects to this service.
bluetooth: Add support for notifying that a socket as data available

This adds the SocketHasData message that has as parameters the data
that came from the socket and the socket file descriptor number on
which it came.
bluetooth: Add BluetoothSocket.readData()

This will only return valid data if called during onmessage() callback.
bluetooth: Add BluetoothDevice.connectToServiceByUUID

This will allow to connect to a RFCOMM service with 'uuid', and be
notified when the connection is done.
bluetooth: Add support for BluetoothSocket.onclose() callback

This function will be called when the socket is closed.
bluetooth: Add support for BluetoothSocket.writeData()

writeData() is implemented using a "sync" message, because we need
to reply to the caller the number of bytes written.
bluetooth: Notify that the socket has closed

In some cases, the socket may close unexpectedly, for example, the
remote device goes out of range, we need to notify that the socket
has been closed in these cases.
bluetooth: Add BluetoothSocket.close()

This method allows the application to request the socket to
be closed.
bluetooth: Add BluetoothServiceHandler.unregister()

This will be used when the application wants to stop listening for
connections.
packaging: Link with libbluetooth

Now that we are using functions provided by libbluetooth we need to
link against it.
bluetooth: Add ConnectRFCOMMByUUID message

This will allow BluetoothDevice.connectServiceByUUID() to be implemented.

For BlueZ 4, it is using the org.bluez.Serial interface of an device object
to connect to an service with an chosen uuid. The ConnectFD() interface will
return an file descriptor in the connected state.
bluetooth: Fix unused variables warnings