API DataObject::validate() visibility changed to public (issue #1659)

DataObject::validate() is currently set to protected, but this means
you can't call validate() from outside the context of itself unless
you overload the method to use a public visibility and then call
parent::validate()

As it would turn out, most classes that overload this method already
set the visibility to public, so it would make sense the parent matches
that as well.

Probably shouldn't go in 3.1, so this pull request has been made against master (to be 3.2)