Smartdown evaluation engine

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

My reasoning is that I would prefer it failing loudly if I'm trying to compare a flow to a non-flow thing. I also would like it to not fail if I am comparing it to something that quacks like a Flow.