Smartdown evaluation engine

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

yeah I did consider that but it seemed like too much boiler plate. Agree that multiple expectations in a test should be generally avoided, but in this case it felt like the two things are so interrellated that it doesn't matter too much. Maybe one of the expectations is redundant in fact. I don't feel that this is a show-stopper.