Chef provisioner cleanup

Replaced the Chef only elevated shell scripts with a single reusable PowerShell script that can be used by any command that spawns a new process. This will be used by the shell and puppet provisioners for Windows guests.

Building the Chef client and solo commands is now done by a single class for all platforms. This reduced a lot of duplication and allowed unit tests to be added around it.

Reboot capability was not getting invoked like it should have been by the Chef provisioners - fixed.

Chef binary_path config setting was not getting properly consumed on Linux - fixed.