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
Merge branch 'release' into dev

Conflicts:
	src/Microsoft.AspNet.SignalR.Core/Infrastructure/TaskQueue.cs
	tests/Microsoft.AspNet.SignalR.FunctionalTests/Client/HubProxyFacts.cs
	tests/Microsoft.AspNet.SignalR.FunctionalTests/Server/Hubs/HubFacts.cs
Fixed merge of #2653