Switch to storing a composite id in the pool

The `machine.id` isn't knowable during all stages of the machine lifecycle.
Switch to using a composite id consisting of:

  - The path to the Vagrantfile

  - The machine name
Re-work action hooks

Now that we no longer depend on `machine.id`, we can hook in before
`ConfigValidate` and re-work networking calls. This has the benefit of
eliminating the `0.0.0.0` hack and all the edge cases that came along with it.

Also, append directly to the `:machine_destroy` action. This along with the
generality of `ConfigValidate` ensures that auto network isn't tied to the
implementation of a particular provider.
Add PoolManager class for multiprovider support

The PoolManager is a new object that will be serialized and deserialized to the
`pool.yaml` file. This class creates a new Pool of "/24" IP addresses for each
Vagrant provider.
Merge pull request #11 from Sharpie/multiprovider-support

Multiprovider support
Change Pool network_range to attr_reader

Changing the range of a Pool object after creation will result in undefined
behavior. Downgrade from `attr_accessor` to `attr_reader`.

Also, add docstring.
Sync pool operations and eliminate race conditions

This patch re-implements Pool storage using `YAML::Store` from the Ruby stdlib.
`YAML::Store` provides a hash with autoflushing file-backed storage. Concurrent
operations between multiple processes are protected by `File.flock` (to the
extent that `flock` works on a given filesystem).

Previously, persistance was handled by de-serializing a `Pool` or `PoolManager`
object from storage at the beginning of a Vagrant run and then re-searializing
it when the run completes. This method enabled some notable race conditions:

  - If the Vagrant process did not exit cleanly, an updated pool file would
    never be written. However, the vagrant process may started VMs that are now
    using IP addresses from the pool.

  - Starting multiple Vagrant processes would result in divergent states that
    could not be reconciled.
Use Markdown in YARD docs
Restore address lookup by VirtualBox UUID

A small change to `address_for` that matches against old UUID values if
present.
Release addresses allocated by VirtualBox UUID

This is a partial revert of 9b7a673 as it restores a `hook.before` on
`VagrantPlugins::ProviderVirtualBox::Action::Destroy`. This allows us to
release VirtualBox UUID allocations from the Pool before the Destroy action
removes the UUID from a machine.
Fix pool file creation

Pool files are no longer created with the default "/24" range. Instead, this is
done dynamically the first time a request is made to the pool manager.

Started a new `PoolStorage` class which inherits from `YAML::Store` and adds
logic for intializing and upgrading the pool file data structure.
Re-implement upgrades of existing pool files

By overriding `YAML::Store#load` in `PoolStorage`, we can intercept data as it
is loaded and perform on-the-fly upgrades of the serialized data structure.
Add proper YARD documentation to PoolManager
Ensure PoolManager#generate_pool_for is idempotent
Merge pull request #12 from Sharpie/synced-ops

Implement persistence and synchronization for pool.yaml

Fixes #6.
Merge pull request #13 from Sharpie/restore-uuids

Restore functionality to VirtualBox UUIDs
Update CHANGELOG and version for 1.0.0.beta1