Smartdown evaluation engine

Also added a command line script in `bin/smartdown` which can evaluate smartdown.

Surely this could happen in the case where we throw random inputs at the flow, if the correct validators are not in place etc? which is bound to happen over the first iterations of some of the flows, but only in the case where "wrong" data is given as an input. Can we put a placeholder in the backlog or similar to deal with this and report errors in some kind of readable way?