Named Provisioners

This adds named provisioners to Vagrant, fixing a variety of issues, such as #2850. There are a few changes in here:

* The syntax of `config.vm.provision` has changed to `config.vm.provision NAME, type: TYPE`. If no `type` is specified, the name is assumed to be the type. This keeps backwards compatibility. 

* The old syntax of specifying an ID with `config.vm.provision TYPE, id: ID` still works, but outputs a deprecation warning and will be removing in Vagrant 1.8.

* `--provision-with` flag on up, reload, etc. works with names as well as IDs.

* The output during up, reload, provision, etc. now shoes the name and the type, if there is a name.