Add support for tables with outbound foreign key constraints.

Brute force the new constraint names by offsetting the (optional) index in the name by the total number of keys.
A much better way to ensure constraint name uniqueness

Reads all of the constraint names and makes sure to choose one that does not clash.
Actually test that the foreign key constraint is still there, rather than just dropped.
table constraints should only be foreign key constraints, since unique constraints are already stored in indices
Hash#slice is an ActiveSupport extension.

Do not assume it is present.