Detect valid shells and warn

Closes #11143

In cases where we shell out, we might be doing this with an invalid shell which will cause the command to fail with no explanation why. This adds a small routine to attempt to guess whether or not the given shell is valid and throws a warning if it is not. I debated using ```chsh -l``` but didn't want the overhead of spawning another process.