Make speculative insertion abstraction prevalent

With this commit, the speculative insertion abstraction exists in all parts of
the system - it isn't appropriate for the executor code to refer to specific
types of upsert clauses. Prefer talk of an abstract policy with regards to how
to handle duplicates.

This has the effect of fixing a bug where with ON DUPLICATE KEY DO NOTHING,
uniqueness would be spuriously enforced for non-unique indexes.

Misc clean-up of executor functions.

Bump catversion due to change in stored rules representation.