Abbreviated sortsupport keys

Add a new infrastructure to sortsupport, and add a single client of this
new infrastructure, the text sortsupport routine.  This infrastructure
allows opclasses whose sortsupport routines support this additional,
optional new capability to provide abbreviated representations of Datums
in advance of sorting, generated through an opclass-specific encoding
scheme.  An abbreviated representation is typically pass by value, and
the capability is thought to mostly be useful for pass by reference
types, but there are no hard requirements on representation.

Opclasses that support this new capability provide a special
abbreviation-aware comparator (in addition to the usual, ordinary
sortsupport fmgr-eliding comparator).  This comparator returns a value
less than, equal to, or greater than 0, in a manner similar to the usual
fmgr-eliding comparator (which is to say, a manner similar to any btree
support function 1).  However, there is an important difference:
sortsupport clients such as tuplesort interpret the value 0 as
"inconclusive".  Inconclusive comparisons obligate these clients to
perform a tie-breaker ordinary comparison in respect of the same
attribute.

By generating abbreviated keys, the optimization can speed up both
internal and external sorts considerably.  Because of the high cost of
CPU cache stalls when sorting, cache efficiency is a crucial
consideration in engineering sorting algorithms and related
infrastructure.  Pass by value representations have much greater
temporal and spatial locality than pass by reference representations.
Furthermore, the abbreviation-aware comparisons can themselves be far
cheaper than an authoritative comparison, if the abbreviation encoding
scheme can produce a "reductionist" representation sufficient to resolve
most comparisons.  Encoding may be expensive, but if an encoding process
can occur N times, rather than having essentially the same encoding
process occur N log N times, that can be a highly effective
optimization.

The expense of encoding may well be problematic if no benefit can be
derived from abbreviated keys during sorting, though.  Opclasses
supporting abbreviated keys also provide an "abort" callback, which
hints the number of rows to be sorted in total, and progress so far.
This can either abort the abbreviation encoding process entirely, or
give the encoding scheme the ability to adapt its encoding strategy in
order to maximize the number of comparisons that are resolved with
abbreviated keys.  HyperLogLog, a streaming cardinality estimator
algorithm is added to give clients of the new sortsupport infrastructure
a principled way to estimate the usefullness of encoding.

Currently, only the MinimalTuple tuplesort case uses abbreviated keys,
and not all MinimalTuple clients use the optimization.  In one instance,
this is noted as an open item (presumed to be addressed in a later
commit to the PostgreSQL master branch).  In most other instances, we
deliberately limit abbreviation because it isn't likely to pay off, such
as with top-N heapsorts.

Support for abbreviation within text sortsupport works by copying the
first 8 bytes of a strxfrm()-returned blob to an 8 byte Datum.
Abbreviation-aware comparisons are simple memcmp() comparisons of this
representation.  As is always the case with text, tie-breakers
optimistically attempt to get away with a simple memcmp() of the
original text string before an expensive strcoll() is performed, so low
cardinality attributes can still benefit from this optimization to a
considerable degree.
Submitted patch for B-Tree support
Integration work, CLUSTER still broken
Regression tests pass, abortion probably broken