I'd love to have `is_widget()` be the definitive function that's called by `validate_widget()` and every other widget-validation function, but don't we want the extra error information that an exception can provide, as in `cyder.cydns.validation.validate_label()`? An exception is a wide pipe, while a boolean is a narrow one.

For instance, suppose `is_widget()` is the most basic widget-validation function. It returns True or False. If you call `is_widget('foo')`, all it tells you is whether 'foo' is a valid widget, not what's wrong with it. `validate_widget()` calls `is_widget()`, so it can't tell what's wrong with the widget either. If the widget isn't valid, the only thing the exception can say is `{} isn't a valid widget`.

If we flipped them around and made `validate_widget()` the base function and made `is_widget()` call `validate_widget()`, then `validate_widget()` could complain `{0} isn't a valid widget because {1} contains a "z" and thus doesn't conform to RFC 9001 (section 42).`.