Datalog.ColumnDatalog tables are represented as a nesting of multiple maps; for instance, a binary relation on integers is represented as a unit Int.Map.t Int.Map.t.
A Column represents a single argument of a relation, and contains enough information to be combined with other columns into a n-ary relation.
Note: The Column.id and Column.hlist types encode some precise type-level information that enables an easy-to-use syntax for the create_relation function below. Understanding the type parameters for Column.id and Column.hlist is not necessary to use this module.