Environment#data_dir

This is basically a directory to store state.
New validation method on the root that returns errors
Remove the old config validation error
I can remove the `validate!` method from the v1 root
Remove DeprecationError
Ignore empty error groups
Convert existing validate methods to new API for kernel
Machine objects are passed into validate instead of env
Validate providers and provisioners!
Add a V2 config helper to merge errors since that seems common
Update shell provisioner to latest validation api
Update puppet provisioner config to latest validation API
Update Chef provisioner to new validation API
Remove the ErrorRecorder
Builtin: ConfigValidate will validate your configuration
VirtualBox uses the new validation middleware
VM configuration only validates the active provider
Only merge provider/provisioner errors if they exist
Verify we have errors to show if we're going to show them
Merge branch 'config-validation-revamp'

This introduces a new configuration validation API and middleware builtin.
The big change here is that providers and provisioners are once again
validated. The API change itself is pretty minor, but important: machines
are passed into the validation instead of just the environment. This allows
validation to do a lot more, since it has access to the machine it actually
cares about.