Provider usability tests

This introduces a new API to provider plugins, a class-level `usable?` method. This returns true/false if that provider can be used on the system. Optionally, Vagrant may ask the provider to raise an error if it is unusable.

This check is currently only used when requesting a machine to show errors earlier, but in the future will be used to implement "default" providers in a more clever way.