Async message parsing
Currently we have situation that sometimes a message response comes out of an order and we  fail to map it to a request as that request already failed. I periodically see this when loading labels and some events kick in.

I propose having a different model of request parsing.

When we issue a request that waits for a response we register it's handler in a queue. Then when a response comes we iterate through all handlers in a queue to find matching request handler. Request handler can tell if passed response was intended for it.

This handler queue can have permanent Event handler in it so all events are processed separately.

All this will allow us to start using async await in our code.