Changed concept predicates to structs with implicit bool conversion.

This makes them composable, unlike the former solution of constexpr
functions. In particular, it now becomes possible to create
higher-order concept predicates, such as `All<Eq,T0,T1,...>`.
Higher order 'All' predicate.

Checks a compile time predicate against a variadic list of types, e.g.
`All<Monoid,T0,T1,T2,...>::value`.
Equality for sum types with Eq satisfied for all element types.