Smartdown evaluation engine

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

My reasoning behind this is to avoid a method missing error if you compare a flow to some non-flow object which doesn't respond to `#nodes` or `#name`. In that case you want `#==` to return `false` rather than raising an exception (although I admit there is no unit test for that scenario). Open to other possibilities if you think there's a better way?