Initial INSERT...ON DUPLICATE KEY UPDATE commit.

Gave some basic shape to parser structure.
Earlier work on INSERT...ON DUPLICATE KEY UPDATE
Thought on serializability
Clarify comment. Diff minimization.
proceed_with_insert() modularity fix
Make index_proceed consistent with other indexam stuff
Refine thoughts on serializability
Remove defensive measure within ExecEvalScalarVar()
Use PhasedLockState pointer directly
Remove -AssertMyBuffer()
Palloc()'d state
Tweak grammar for consistency
indexam stylistic refinements
Remove now redundant DEBUG_TRACE_BTREE_OPS traces
Comment on amcanunique contract within nbtinsert
Be cleverer about managing state memory

Allocate from top-level btree functions (i.e. routines referenced in catalogs).
This is consistent with existing code, but also allows us to cache an index
tuple for multi-phased inserts.
Free when no state too
Clarify btree/am responsibilites around lockState
lockState rename
Clean up DUPLICATE DO NOTHING representation

This affects parser, planner and executor structs, and some associated
functions.

Change in order in node structs necessitates catversion bump, as stored rules
invalidated.