Let predicates self describe in a human form

Useful for debugging, and can be used in graph visualisations.

Currently graph visualisation has to know about each kind predicate
(and it's internal implementation) to create a human readable version representation.

This puts that responsibility into the predicate itself.