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

  - The provider 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.