Promote key pair management functionality to be part of the base compute API

This pull request promotes key pair management functionality to be part of the base compute API as discussed on the mailing list.

It includes the following changes:

* Add new `KeyPair` class in `libcloud.compute.base` module
* Add new key pair management methods to `libcloud.compute.base.NodeDriver` class
* Update existing drivers which previously exposed this functionality through the extension methods (EC2, CloudStack, OpenStack) to use a new standard API
* For backward compatibility reasons and to ease the migration, existing extension methods will continue to work until a next major release (existing extension methods have been modified to call new methods which are now part of the standard API).
* Add some missing tests (while working on this I have noticed there were some missing or bad tests for the key pair management functionality)
* Update upgrade nodes section in the documentation
* Add a new section on how to use key pair management to the documentation

Only which currently exposes key pair management through extension methods and I haven't updated is NephoScale. The reason for that is that NephoScale offers two types of keys (password and ssh) and I haven't totally decided yet what I want to do with it.