Implementing an asynchronous client on top of the existing one

Hi Tadas.

So I took some time this morning to implement asynchronous requests, including a test case.

I implemented this in a different class "AsyncMpClient", which uses an existing MpClient and just adds asynchronous functionality. It can be constructed using MpClientBuilder "createAsyncClient(int concurrentRequests)".
I did this in order not to break immutability of the original client. Well at least your test cases politely asked me not do it ;-)

The REQUESTS dequeue had to be changed to a thread safe implementation in order to support my test case. The count() addition to RequestLog is used to verify that all my ten test message have been sent.

I tried hard not to violate your design consideration; I probably failed anyway, so please let me know where you disagree :-)

Best regards

Marius