Better WinRM command failure messaging

Non-zero exit command failures should include the stdout and stderr in the error message just like the SSH communicator. A new WinRMBadExitStatus class was added to include stdout and stderr that differs from the generic ExecutionError that can occur when WinRM returns a 500 status code. Getting the output is helpful during development.

Its now possible to specify only an error_class and have that use the correct error_key by default. Previously only specifying an error_class would display the wrong message if the caller didn't also override the error_key option. I think the SSH communicator also has this issue since it always provides a default error_key option.