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 predicate
and it's internal implementation, this puts that repsonsibility
into the predicate itself