Refactor datasource translator logic

Previously the method convert_obj() had a lot of logic which would
verify that a translation table schema was valid. This code was run each time
update_from_datasources() was called and the check only really needed to be
done once since the translations tables do not dymanically change.

The validation of schema is now done once when a datasource driver calls
register_translator(translator). Having the datasource driver register the
schema solves the problem of tables not showing up for a datasource driver
unless it makes a full pass through update_from_datasources() which can take
a while depending on the speed of a datasource. Now the tables show up when
the driver loads.

In addition, previously there was a bug where multiple translators could
define the same table name and this would go undetected. Now we check
for this because we keep track of these tables in the DataSourceDriver class
direclty now.

Closes-bug: 1393577

Partially implements blueprint: refactor-datasource-driver-framework

Change-Id: Iacf9144cad7c60251c138d8651cf55e331f8fe53