Custom error messages for required properties in Hashie::Dash subclasses

I'm not a fan of all of this type-checking, though it's pretty prevalent throughout the codebase. Is the extra flexibility of allowing Strings, Procs, and Hashes as the `required` option worth decreasing the readability of the code that handles it?

Personally, I like the original suggested implementation in #98.

```ruby
class Credentials < Hashie::Dash
  property :req_attr, :required =>  true, :message => "is required for the credentials hash"
end
```

This is pretty clear and wouldn't require all of the type-checking, which would make the code more readable.