Make connection the socket object owner

Improve the socket interface by making the amqp_connection_state_t
object the amqp_socket_t owner, and tie its lifetime to the connection's
lifetime.  This prevents a class of silly errors where the socket object
isn't freed, or the socket object is assigned to two different
connection objects
Get rid of amqp_socket_error interface

Get rid of experimental amqp_socket_error interface. Errors are returned
using the error codes from the primary function