Merge pull request #598 from s0undt3ch/develop

Properly handle keyboard interrupts when parallel loading providers.
Fix arguments order in error.
Fix function arguments positioning.
In order to call a function for a driver, one must now use the profile name, not the driver name.

If there are multiple drivers defined under the same profile, and the driver is not specified, the user is warned and salt-cloud exits.
Some context black magic to solve some problems.

Instead of changing most of the cloud driver functions arguments to accept either the `vm_` argument or the current profile name, let's play with injecting the current profile name, which will be required, into python's `__builtin__`. As soon as done, we clear the built-ins.
Don't define extra built-ins, define module globals.

In order to use our active provider context manager, we were previously defining an extra built-in. That built-in, as all built-ins would be available to the python interpreter. We just need to define and update a module level global.
After leaving the context manager scope, the previous value is reset.
Fail soon with an improper cloud providers alias setup.
Plurals typo.
Don't squelch the exceptions.
`is_provider_configured()` can now handle driver names, provider aliases and `<alias>:<driver>`.
Both `do_function` and `do_profile` now make use of the provider context.
Log when a specific provider cannot return the listing data asked.
Add comments to why we're not using `CloudProviderContext`.
`--list-providers` does not accept arguments. Fail!
Exit if there's nothing else to do.