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
Add function 'predicate'

This is a bit of a stretch of 'predicate', as they should be boolean, but that is
the naming convention everything else uses at the moment, so stay consistent.

- Parsing rules for a function predicate that looks like `function_name(arg_1, arg_2)`
- Transform to a Function model, which can evaluate the function and return it's result.
- The `with_eval` is a hack to get around State auto-calling any callable object, as its
  fetched from state. Changing that behaviour affects a lot of things, and I want to keep
  this commit small, so with_eval is a briding solutuin to get this working first. It
  should be removed shortly.
- It's assumed functions will be defined on state, either as a built-in, or
  injected by an external application when the flow is created.
Very hacky function arg calls

State tries to evaluate everything, immediately, unless you stop it

What would changing this behaviour break, and can that be reworked?
allow nested function calls, by treating evaluatables differently from state calls
(Very WIP, do not merge) Stop evaluating callable objects returned by state

Not auto-calling callables returned from state lets us get back plugin/function
values from state and let them be called by Function, with it's own choice of
arguments.

This seems to be tightly bound with the engine internals (especiall tests).

This commit makes all the tests pass, with auto-call removed, but may not
cover all cases if test coverage is missing. I don't fully grok whats going
on here, and the eval-if-possible in Named predicate fixes some things but
is affecting a lot more than planned.