Listening side of protocol...

Upon sending a request to the device we stash the callback and await
a BluetoothLE notification in return. When we get that we check the
ACK looks as expected and fire the callback.

If we don't receive the ACK after 2 seconds we assume something has gone
wrong and fail the response.

When sending multiple requests, we only have one in-flight at a time. The
next is queued and not sent until we receive the ACK for the first (or
it timesout).