Predicate labels

Meaningful labels on node transitions really help to make the visualisation easy to read and understand. Therefore I've gone to some length to make it straightforward to extract meaningful labels from the flow definitions. 

This PR introduces predicate objects which support meaningful labels whilst still being executable by the actual smart answer flow.

This is an incremental step towards #897 which will allow us to start modifying flows to use the new syntax without merging the graph visualisation code (yet).