Ensure calling connection.Start() multiple times is safe in .NET client:

- Don't initialize the connection state unless we're actually starting
- Added a unit test to verify calling Start() multiple times doesn't corrupt the connection
- #2675