Add param to Hub.OnDisconnected to distinguish clean/unclean disconnects

- A clean disconnect indicates the client called stop
- An unclean disconnect indicates the client timed out
- A timeout may or may not mean the client reconnected to another server
Trigger OnConnected with a /start request

Triggering OnConnected while handling the /connect request made it
difficult to report errors and send/process messages while OnConnected
was running.
Stop blocking transport WriteQueues

- Always return a valid Task from ForeverTransport.EnqueueOperation
  allowing us to reduce allocations inside of Subscription.Work
- This will prevent older clients that don't make a /start request from
  receiving proper errors when OnConnected throws
Ajax logic unification in the JS client
Reindent calls to the new transportLogic.ajax function in the JS client
Use /start requests to connect - JS Client

- Include the client protocol in the query string of all requests
Use /start requests to connect - .NET Client

- Include the client protocol in the query string of all requests
Stop sharing MyReconnect instances in our tests

- There must be only one PersistentConnection per request