Use nicer error message for MySQL CHANGE COLUMN if type cannot be determined
Better fix for not picking up foreign keys in other databases on MySQL

@opts[:database] can be nil on do and jdbc, and can be incorrect
if a USE statement is used, so use the DATABASE() function to get
the currently connected database.
Make PostgreSQL metadata parsing handle tables with the same name in multiple schemas

This changes the PostgreSQL support to correctly handle cases
where an unqualified table is used, and a table with that name
exists in multiple schemas. For example:

  DB.schema(:foo)
  DB.indexes(:foo)
  DB.foreign_key_list(:foo)

Previously, DB.schema would raise an exception (since it checked
results to see if they came from the same schema), but indexes and
foreign_key_list would return information for all tables with
name foo, no matter the schema.

This refactors the support so that instead of adding a filter for
the table name (and a filter for the schema name if one is given),
it always casts to regclass and then oid, and the filter is done
on the unambiguous table oid.

This new way respects the schema search path, and makes it so that
DB.schema(:foo) returns information about the table referenced by
DB[:foo].

This is not completely backwards compatible.  Previously, these
methods allowed you to reference a table outside the schema
search path without qualifying it with the schema.  Now, when
referencing a table outside the schema search path, the schema
must be specified explicitly.  This mirrors the dataset behavior,
where referencing a table outside the schema search path without
qualifying it also raises an exception.