refactored ssh key support into its own middleware

This PR refactors ssh key support into its own middleware in preparation for implementing a rebuild command. It changes configuration to align more closely with Vagrant defaults -- specifically a user defines his key using config.ssh.private_key_path or provider.ssh_private_key_path. The public key is derived from the private key path by adding the .pub extension.

It drops supports for the Vagrant insecure key. An error will be raised if the user does not define his own private key path. Additionally, the setup of a new user (which was hardcoded to the vagrant user) was dropped. This was done for two reasons:

- the creation of new users should be left to the individual using the provider via custom provisioning
- security of new machine was greatly improved; by default the provider creates a new machine that can only be accessed via a user-defined SSH key (vs a known vagrant user/password combination)