Add disconnect modification support to exception handling

This patch backports an additional feature from the
SQLAlchemy 0.9.7 handle_error() event, the ability to alter the
"is disconnect" status of an exception.  In this case, the
supported case is only to take an exception that's not a disconnect,
and to graduate it to a disconnect.  Going in the other direction
isn't possible with the approach here because the connection invalidation
would already have taken place, as we are wrapping the _handle_dbapi_error()
method.

We may want to be able to promote an exception to "is disconnect" in
cases where special database configurations or backends such as that of
Percona have complex detection scenarios not covered by SQLAlchemy's
provided backends.

partially implement bp: use-events-for-error-wrapping

Change-Id: I23a4da2dc39af015a01d6d587c57c5e1c4b95f31
Merge "Add disconnect modification support to exception handling"