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