Smartdown evaluation engine

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

Those three methods seem to be very very very similar. I'm also wondering how we could make this object open/closed to further "adding node types" development...happy to chat, I don't have a clear idea yet.