Allow recreate of indexes and constraints in 1 tx.

This is not an important feature, but recreation, the way the code handled
it before lead to the database becoming unusable, and supporting recreate
is easier than detecting and disallowing it.

This is implemented by making sure that the add/create operations check
for prior removes before actually doing add. In the case of constraints we
also check for the background creation of the index to ensure that this
does not happen again.

More thorough testing for index/constraint creation has been added where
each test case asserts
* that: Create+Recreate: results in creation.
* that: Recreate: results in nothing changing.
* that: Recreate+Drop: results in removal.
Each test case also asserts that recreation in each transaction can be
repeated multiple times. Running this all in a single test cases asserts
that the recreation on the "high level" also works.

When creating an index for a constraint, make sure that we await the
population of the constraint index, and not some other index. In the
cases where we replace an index with a constraint there will be another
index present, so it is possible that we would await that index instead,
which would lead to failure in commit. It is in fact quite likely that
we would await this other index, since this other index is likely to
have a lower rule id.