Smartdown evaluation engine

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

Type checking in an `#==` implementation is usually advisable. Consistent behaviour in Ruby is that you can compare equality of different types and you just get false.

I suppose you could replace the type check with an interface check by doing `#respond_to?` but I need convincing of the use case for that.