Make Connection destruction cleaner and safer

Carefully destroy all channels when destroying the connection, to ensure
nothing accesses the deleted Connection instance.
Handle close more cleanly in Connection

The connection will be gracefully closed (allowing time for writes) when
the close() method is called. If it hasn't finished after 5 seconds, it
will be forcefully closed. In all cases, the close() signal is emitted
exactly once.
Suppress loud warnings from protobuf headers

The -isystem flag on clang and gcc will suppress some loud warnings out
of protobuf-generated headers, notably for unused parameters.
Add API documentation for Connection