Added logic to ensure connections can be started and stopped repeatedly without error.

- Also added logic to ensure that calling start multiple times works correctly

#1873
Addressed code review comments
Modified connection.stop to no longer deffer itself until the page has loaded.

- It now unbinds the load event handler for the connection start.
- This allows for multiple starts/stops to occur during page load.
- This issue cannot be unit/functionally tested directly because it requires the page to be in the loading state.

#2189
Updated formatting of core.js
Made it so stopping the connection will always unbind the "load" event if one has been bound.

#2189
Re-ordered when we clear private non-timeout based state.

- This way we can successfully reject connection deferrals.

#2189
Added tracking for the negotiate request so calling stop properly aborts the request.

- Without aborting the negotiate request starting and stopping in quick succession can cause multiple active ajax requests attempting to connect.

#2601
Added test to verify hub event handlers are only triggered once per binding.

- This is a multi-purpose test to verify 3 bugs.

#2187
#2160
#2190
Added a test to verify when we start->stop->start that all deferred's are rejected or resolved correctly.

#2189