Refactoring primitive types

The idea for this patch came from this line in the ```keyvalue``` rule.
```ruby
def val
  datetime ? datetime.value : eval(string || bool || float || array)
end
```

I think each data type should know how to return it's own ```value```, making the ```if``` superfluous.