Establish Oracle outputtypehandlers for JSON expressions
Fixed issue in the Oracle dialects where a :class:`_types.JSON` value would
be returned as an undecoded string for any JSON expression that is not a
JSON column, such as a bound parameter, as well as for textual constructs
with positional columns, such as :func:`_expression.text` combined with
:meth:`_expression.TextClause.columns`.
Native JSON columns previously worked only because the driver decodes
DB_TYPE_JSON on its own; the only JSON-aware handler was the
connection-level one, which fires solely for DB_TYPE_JSON and only when a
custom json_deserializer is configured. _OracleJson now supplies a
_cx_oracle_outputtypehandler() of its own, covering JSON expressions that
arrive as VARCHAR / NVARCHAR / CLOB.
Additionally, the per-statement cursor outputtypehandler matched the
compiled result columns against the driver's result columns by name. For a
TextualSelect the names reported by cursor.description are generated by the
database and have no relationship to the names given to .columns(), so no
handler was installed at all. Handlers are now matched positionally when
_textual_ordered_columns is set, consistent with how CursorResultMetaData
already merges these constructs.