Treat the packet queue as if there are multiple iocp threads, use a lock around check front pop and emplace back.
There is not a performance criteria and if we add another thread to dequeue io completions, this lock would be required, so make
'correct' code which we can optimize out if we decide a performance criteria requires it.