Preserve constraint names

Constraint names are now preserved, index, join and foreign keys will store it. It will contain a generated or a given name. Constraint names must now be unique within a schema. Foreign key naming is now done by the DefaultNameGenerator, ensuring unique name generation. Join names are also generated only by the DefaultNameGenerator.

Constraint names can now be used as a handle to drop the constraint.

 

Personal preference: I don't think including the schema name here buys us much as they are already unique per schema. It becomes a little repetitive (e.g. looking at i_s.table_constraints or if we had a metadata helper in the cli).

It certainly isn't wrong, though, and open to other arguments.