Smartdown evaluation engine

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

Hmm, not convinced I would want to raise in the case of comparison with another object type which doesn't have the same interface, what about comparison with `nil`? 

I take the point that `#==` is more about 'duck type' equality rather than actual type equality.