Preserve constraint names

The updated version on preserving constraint names. 
- Constraint names are now preserved for only constraints
- Primary keys, Unique indexes, foreign keys, grouping foreign keys, have constraint names, this can be given otherwise it is generated. 
- non-unique indices have no constraint name, this is enforced by the parser