TheFirstPlaceLoser - removing unnecessary calls to `TransportFailed`

`ServerSentEventsTransport` and `LongPollingTransport` registered callbacks to let the `TransportInitializationHandler` know that the transport failed (by calling the `TransportFailed` method) when the `disconnectToken` is tripped . This was unnecessary since the `TransportInitializationHandler` registered first its own callback for the same reason which would call `TransportInitializationHandler.Fail()`. Because we use the `SafeThreadInvoker` for invoking the `Fail()` method the calls from the transport implementations were no-ops because they would have happened after the call from the `TransportInitializationHandler` which in turn would make `SafeThreadInvoker` ignore any further calls.
Ready...Set...Fail - fixing a race in the `CancelledTaskHandledinLongPollingLoop` test

The `CancelledTaskHandledinLongPollingLoop` test is returning a cancelled task from the poll request and then is checking if the OnError method with the `OperationCancelledException` argument was invoked. It used a wait handle to block the test until the poll request returns. However the `OnError` method is invoked on a different thread and therefore the test may fail due to a race condition if the test starts verification before the `OnError` method is actually called. The fix is to wait with the verification until the `OnError` is called (or fail if it is not called within 2 seconds) to avoid the race.
Sanitize perf counter category instance names:
- Adds support for instance names passed in by Katana v3+ (currently Katana v3+ breaks perf counters in SignalR)
- Tweaked how instance name is set internally in PerformanceCounterManager to make it testable without affecting the public contract
- Updated the sample project to use Katana v3 to ensure we get coverage of fix
- #3002
Stop processing messages before ending the WebSocketFunc Task

- This should prevent ObjectDisposedExceptions from WindowsIdentity
  in OnDisconnected
Added test to verify that WindowsIdentities are usable in OnDisconnected
Detect slow callbacks in .NET client receive queue and trigger an error

Since we serialize the invocations of Received callbacks in the .NET client,
there is a real risk of deadlocks resulting from one callback blocking waiting
on another callback to execute.

This commit introduces a TaskQueueMonitor used exclusively by the .NET client
to try to detect callbacks that are running long and notify the user using
Connection.OnError that a callback may be deadlocked.

The amount of time a callback may execute before an error is raised can be
configured using Connection.DeadlockErrorTimeout. The default timeout is
10 seconds.
Addressed PR comments