Add #next_node_if for conditional next nodes

This will allow us to have a deterministic list of possible next nodes
in most circumstances, which will make it easier to visualize the flows
in a diagram automatically.

The #next_node_if method can take either a block or a list of predicates
(or both).
Allow conditional next_node clauses by nesting conditions

The on_condition() block allows you to define a scope within which the
given predicates must be satisfied. It modifies all #next_node and
next_node_if invocations

Example:

```
on_condition(->(r) {r == 'tourism'}) do
  next_node_if(:outcome_visit_waiver) { %w(oman qatar united-arab-emirates).include?(passport_country) }
  next_node_if(:outcome_taiwan_exception) { %w(taiwan).include?(passport_country) }
  next_node_if(:outcome_school_n) do
    country_group_non_visa_national.include?(passport_country) or country_group_ukot.include?(passport_country))
  end
  next_node(:outcome_general_y)
end
```
Add explicit validate method
Add facility for calculating intermediate for next_node
Add #response_is_one_of predicate
Add #response_has_all_of predicate
Add country_in convenience predicate
Add responded_with predicate
Use next_node as fallback in multiple choice question

Instead of the next_node command overriding the other calculations, use
it as a fallback if no other match is found. I haven't verified that no
flows rely upon this behaviour but am in the process of going through
every flow to rewrite the next_node calculations. I would be surprised
if the override semantics would have been relied upon as it's a slightly
counter-intuitive behaviour anyway (I think treating it as a default
would be more of the expected behaviour).
Change check-uk-visa to use next_node_if
Convert to use #next_node_if