Support friendly labels on predicates

Introduce predicate objects which are evaluated in the context of the
state and response. Predicate objects can have an explicitly provided
label or an outomatically generated one.

We can use these labels to annotate the edges when visualising smart
answer flows.
Add visualisation using JointJS and graphviz

Support for visualising flows as either an in-browser SVG-rendered graph
generated using JointJS, or as a graphviz 'dot' file.
Refactor flows to use new predicates

these make the graph transition labels more comprehensible