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.
Refactor flows to use new predicates

these make the graph transition labels more comprehensible
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.
Extra rank separation gives a bit more breathing space
Move third party assets to vendor/
Only use smartanswers.js in flows
Use | for combining VariableMatches predicates

The consensus amongst the dev team was that `|` is a more intuitive
operator than `+`.

Also added unit tests and updated the flow to use this style.
Fix js errors in chrome 35

Was getting

```
Error: Invalid value for <text> attribute transform=" "
```

This has been fixed in jointjs HEAD but not released yet. This includes
a hand-built release of joint js from the repo revision 26b62f37b7.
Merge pull request #897 from alphagov/graph-visualisation

Basic graph visualisation