This pushes the provider implementation of validating the shell into the provider. This works, but it breaks encapsulation between the type and provider.

I think that the correct method of doing this would be defining `#shell=` on the providers to call `#check_valid_shell` themselves instead of pushing this in the type.