Smartdown evaluation engine

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

I agree, seems like you could collapse these into `#append_node` and have the factory methods for the specific node types elsewhere. You could specialise this object for different classes of smart answers, by perhaps adding a decorator with these factory methods that delegate to `#append_node`.