Avoid calling BluetoothSocket.destroyNative twice

If the destroyNative JNI method is called twice, it will attempt to free
the socketData twice, and the second free will cause an assertion failure.

To avoid this, check whether mSocketState has already been set to CLOSED
while holding the write lock.  If it has, then destroyNative has already
been called and should not be called again.

Bug: 3096033
Change-Id: Ic7c0bbf21823d389b26919da8c533d8ac4d49064
Lower the RAM requirement for hardware acceleration

Change-Id: I79d277d5a55c138935cf15757cc2c7132596009e