Queue & dispatch all receives in the client
- This ensures that calling stop from a message receive doesn't deadlock the receive loop
- Using TaskQueue.cs so added that to client projects
- Had to modify TaskQueue to work in Portable, now do optimistic increment then unwind if we exceed the max size
- Added a test to verify that async connection start, invoke, stop works without dead-locking
- Drain the receive queue when Stop called
- Raise connection error event if queued OnReceived callback throws
- Removed duplicate call to start from failing test (Will log a separate issue to track the reason why this causes the failure)
- #2653