Don't use Pathname#each_child for 1.8.7 compat [GH-979]

each_child is a 1.9.x feature. The implementation however is simple
enough that I copied it over and just use the 1.8.7 compatible version.
FreeBSD guest network config upload must be a file.
Check for permission denied when using SCP to upload [GH-924]
Convert the path to a string because it may be a Pathname
Use `next` instead of `return` for 1.8.x compatibility.

Since we're not calling this lambda from inside a method, the `return`
causes a LocalJumpError on 1.8.x. It appears this functionality works
fine on 1.9.x but we'd like to support both. The correct behavior
appears to use `next`.
Separate out the versions the config loader knows as init params.

This means that the Config::Loader now only knows how to load
configuration for versions used to initialize the class. This lets
things like the tests be completely isolated from what the actual
configuration is for Vagrant. This will be immensely useful to verify
that the loader functionality works for non-trivial bits (like
upgrading) without depending on Vagrant's upgrading functionality.
Config loader no longer assumes latest version for procs.

Previously, all procs were assumed to just be the current version. This
is certainly not going to be true always so now the version number of
the configuration must be explicit if you're assigning a proc to the
configuration loader.
Configuration versions can finalize config after loading

This is useful so that it can take a look at the final loaded
configuration object and possibly make some tweaks to the configuration
object. The use case this was built for was so that config V1 can verify
that there is always at least a single VM defined as a sub-VM, the
"default" VM.
Use config finalize to move some version-specific logic to the version

This moves out the concept of a "default VM" from the Environment class
and makes it the responsibility of the V1 configuration that at least
one VM is defined on it. This lets the configuration ultimately decide
what a "default" implementation is.
Configuration loader can handle upgrading.

The basic process for this is to:

1. Load the configuration using the proper loader for that version. i.e.
   if you're loading V1 config, then use the V1 loader.
2. If we just loaded a version that isn't current (imagine we're
   currently at V3), then we need to upgrade that config. So we first
   ask the V2 loader to upgrade the V1 config to V2, then we ask the V3
   loader to upgrade the V2 config to V3. We keep track of warnings and
   errors throughout this process.
3. Finally, we have a current config, so we merge it into the in-process
   configuration that is being loaded.
Simple logging text change
Use a temporary directory for the VAGRANT_CWD when running tests

Tests before were picking up a Vagrantfile in the Vagrant source
directory, which can cause some funny failures. This ensures that each
test run will actually establish a new temporary CWD so that a
Vagrantfile is hopefully never found.
Test Tempdir class cleans itself up
Renamespace V1 plugin root to Vagrant::Plugin::V1::Plugin

This is mostly a transparent change to end users, but I'm going to put
all base classes for V1 into Vagrant::Plugin::V1.
Move Config::V1::Base to Vagrant::Plugin::V1::Config
Small error message fix.
Merge pull request #991 from muffs/master

Small error message fix. :)
Move the loader into the Config::V1 namespace.
Move provisioner superclass into the V1 namespace
Fix some nondeterminism in tests with GCing tempfiles.

Before, the tempfile "f" could be GC'd before the path was used,
resulting in failed tests because when it is GC'd the tempfile is
removed. We now store the tempfile in an instance variable so that it
isn't even available for GC until after the test is finished running.