Make validation recursive

Calling container's _validate() causes all the contained objects to
also run _validate(), returning any contained object's validation
error as the validation error of the container.