New interface: BluetoothSocketObserver

For those instances which want to be notified for any event sent
from a BluetoothSocket instance, they need to implement this
interface to get notification.
New class: BluetoothSocket

After this new class is landed, communicating with other devices on
profile level should become more intuitive and reasonable. Each
Bluetooth*Manager doesn't need to inherit UnixSocketConsumer, instead,
BluetoothSocket inherits UnixSocketConsumer. That makes Bluetooth*Manager
be able to have more than 1 Bluetooth connections at a time with different
remote devices.
Use (Bluetooth*Managers)->Disconnect() instead of (Bluetooth*Managers)->CloseSocket() since managers are not UnixSocketConsumer anymore
Apply BluetoothSocket to BluetoothOppManager
Apply BluetoothSocket to BluetoothHfpManager
Apply BluetoothSocket to BluetoothScoManager
Remove function ListenSocketViaService()

Since we are now using BluetoothSocket directly for listening, this functions can be removed.
Add BluetoothSocket* as an argument of callback functions in BluetoothSocketObserver

A Bluetooth*Manager may hold more than one BluetoothSocket at a time, therefore
we need to identify the caller (which socket calls the callback function).