Communicator info abstraction

:warning: DO NOT PULL :warning: 

@mitchellh This is a spike to fix #4372, I'm submitting this for early feedback before continuing.

I attempted to make the WinRM and SSH machine connection information separate but equal (that sounds horrible), previously the WinRM connection info would be built from the ssh_info which is unexpected. Vagrant would be easier to maintain if the two communicator systems followed similar patterns and layout.

I replaced usages of machine.ssh_info with machine.connection_info, perhaps a little too zealously. For example, SSH commands will get WinRM connection info if the communicator type is :winrm. It might make more sense to have the SSH commands just fail fast if the communicator type is WinRM.