Add validation of Volumes

Builds on #326
Hm. These errors would be difficult to handle programmatically. May I suggest the pattern:

type ValidationError struct {
  errorType string // e.g., "invalid" or "unsuported"
  errorField string
  badValue string
}
func (v ValidationError) Error() string {
  return fmt.Errorf("%s: %s value of '%v'", v.errorType, v.errorField, v.badValue)
}