types: Add a generic visit over abstract_type
types: Add a generic visit over abstract_type

The api is inspired by on std::variant.

This bridges the runtime type of a abstract_type object to a compile
time overload resolution. For example, it is possible to have a single
lambda to visit a string_type_impl, but it corresponds to two leaf
types (ascii and utf8).

Signed-off-by: Rafael Ávila de Espíndola <1975039f9046bf513b77c0c5639a0efc25f00e7f@scylladb.com>

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