Work on ambient transaction and related refactoring

- Removed the previous "postponed close" state on Connection, which allowed for partial connection
  reuse within an ambient transaction (see https://github.com/franciscojunior/Npgsql2/pull/8 and
  discussion on the list).
- When a Connection is closed while a TransactionScope is still active, its connector is detached
  and returned to the pool, but specially marked as AvailableWithTransaction. Any subsequent
  Connection within the same transaction and connection string will now preferably be attached to
  that connector, preventing escalation to prepared transactions.
- When an ambient transaction completes, all the connectors involved it in are notified. If a
  connector is detached (i.e. its connection has already been closed), it is returned to the pool
  and marked as Available.
- A similar flow has been implemented for non-pooled connections/connectors.
- The above required a refactor of Connector, Connection and some associated classes. In particular,
  to allow connections to be smoothly detached and reattached to connectors, many Npgsql components
  now references the connector instead of the connection, and the connection has been made as bare
  a frontend as possible.
- SSL callbacks are now always registered just before Connector.Open(), and removed right afterwards.