synced_folders/rsync: only chown when necessary [GH-3525]

Run remote rsync as root to guarantee that rsync can write to guestpath.
This obviates the need to chown the guestpath to the SSH user prior to
sync.

This brings a substantial speedup (2x on a moderately-sized shared
folder) and properly triggers filesystem notifications on only the files
changed by a given sync.
Fix processing of VBOX_INSTALL_PATH
Add ssh ProxyCommand functionality to rsync
core: return {} if cached synced folders file missing [GH-3550]

A missing synced folders cache indicates an empty cache, not a failure
that should be handled by the caller. The cache file is missing from
data dirs created by an earlier version of Vagrant.

Fixes #3550.
command/rsync-auto: properly exit on interrupt

Currently, interrupting 'vagrant rsync-auto' once it's waiting for
filesystem events has no effect. Appears to be a deadlock related to
signal handlers in Ruby 2.0 [0].

Remove call to `thread.join` in signal handler. The handler doesn't
need to wait for `true` to be added to the queue; it just needs to
launch the thread.

[0]: https://bugs.ruby-lang.org/issues/7917
Added WinRM elevated shell wrapper script

This script creates an immediately run scheduled task using fresh credentials. This is a generic implementation used by the Chef provisioners. The script gets around several limitations in WinRM.

1. Credential hopping
2. The non-default Administrator account sometimes doesn't have true Administrator access when run through WinRM even with UAC disabled.

In short, this script allows commands to run through WinRM just as if they were run directly on the box.
Don't use interpolated strings for username and password

Its possible that usernames and passwords may contain special characters like $
Allow WinRM commands to be run elevated via scheduled task
Use new Ruby hash initializer syntax
First pass at integrating new WinRM elevated execution wrapper

- Removed a lot of the Windows special casing from Chef runs
- Don't attempt to use @config.binary_env since we don't properly pass this along to Chef
Chef provisioner should utilize reboot capability
Removed old unused WinRM chef provisioner scripts
Fixed bug in CommandBuilderWindows

CommandBuilderWindows would not include the Chef binary in the command when the binary_path was specified in the config.

Backfilled unit tests for CommandBuilderWindows
DRY'd up Chef command building

There's very little difference between the command building on Linux and Windows other than path formatting. All Chef provisioners support the --no-color argument now.

Added unit tests to verify changes.
The various `install` args should always be passed to salt-bootstrap.

Even when preforming config only, the install flags (i.e. -M, -S, -N),
are used by the bootstrap to determine which configs to copy.

This should help with #3542 and should supersede #3548.
Fixed missing end to if
Merge pull request #3557 from shadowfax-chc/correct-bootstrap-args

provisioner/salt: correct bootstrap args
Update CHANGELOG
Merge pull request #3554 from mitchellh/chef-provisioner-cleanup

provisioner/chef: Chef provisioner cleanup with Windows
Merge pull request #3553 from bclarkindy/rsync_ssh_proxy

synced_folders/rsync: Add SSH proxy_command functionality to rsync