FACT-357 Raise errors when executing non-existent commands

The behavior of returning an empty string when a command cannot be run is surprising and makes it impossible to determine if a command failed to run or simply had no output. This pull request allows users to determine if an error should be raised on error, or if a default value should be returned instead. It also updates calling code to respect this new behavior.