sstables: add concept for self-describing type
sstables: add concept for self-describing type

Our sstable parsing and writing code contains a self-describing
type concept, where a type can advertise its members via a
describe_types() member function with a specific protocol.

Formalize that into a C++ concept. This is a little tricky, since
describe_type() accepts a parameter that is itself a template, and
requires clauses only work with concrete type. To handle this problem,
create such a concrete example type and use it in the concept.

scylladb/scylla,scylladb/scylla,scylladb/scylla,scylladb/scylla