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
RespectMe - respecting disconnect token in store WebSocketTransport

The store WebSocketTransport did not respect the disconnect token. Now if the disconnect cancellation token is cancelled we will not try to reconnect if the websocket gets closed and if we are already trying to reconnect we will stop doing this. Note that we don't need to register to the cancellation event since the disconnect cancellation token is cancelled only in the `Connection.Disconnect()` method which also disposes the transport which will take care of the all needed clean up.

Also fixed a race in the WebSocketTransport.Dispose method which might lead to unwanted reconnection attempts.

Workitem #3189
Doomed - prevent from sending a message when reconnecting

Previously the store `WebSocketTransport` would accept `Send` requests when the transport was reconnecting. The change to invoke `OnError()` and throw an exception if this happens - similarly to what we do in the .NET Client.