Fix publickey._to_md5_fingerprint for Python 3

In Python 3, the original code didn't work, because there is no `encode`
function for binaries:

    (Python3.3)>>> [x.encode("hex") for x in b"abc"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 1, in <listcomp>
    AttributeError: 'int' object has no attribute 'encode'

String do have an `encode` method, but it is a different function from the
`encode` in Python 2:

    (Python3.3)>>> [x.encode("hex") for x in "abc"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 1, in <listcomp>
    LookupError: unknown encoding: hex

So I added a "hexadigits" function to our compatibility module (py3) and used
that in _to_md5_fingerprint.
Fix publickey.get_pubkey_ssh2_fingerprint for Python 3

In Python 3, the original code didn't work, because there we cannot concatenate
a string and a byte string.

The new code produces two binaries in Python 3 and two string in Python 2, so
they can be concatenated in both versions.
ec2 driver: Make cidr_ips argument mandatory

If the cidr_ips parameter in this function is None, and therefore the
IpPermissions.1.IpRanges.1.CidrIp is not present in the request to the EC2 API,
the request is not performed. (The response does not indicate an error, but the
security rule is not created).

This behaviour is not documented in
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AuthorizeSecurityGroupIngress.html,
but it is reproducable.

The following request didn't work:

    Action=AuthorizeSecurityGroupIngress
    GroupId=sg-a4b44ece
    IpPermissions.1.FromPort=22
    IpPermissions.1.IpProtocol=tcp
    IpPermissions.1.ToPort=22
    AWSAccessKeyId=...
    Signature=...
    SignatureMethod=HmacSHA256
    SignatureVersion=2
    Timestamp=2014-04-16T07%3A43%3A21Z
    Version=2013-10-15

While this one did (the only difference is adding CidrIp):

    Action=AuthorizeSecurityGroupIngress
    GroupId=sg-a4b44ece
    IpPermissions.1.FromPort=22
    IpPermissions.1.IpProtocol=tcp
    IpPermissions.1.ToPort=22
    IpPermissions.1.IpRanges.1.CidrIp=0.0.0.0/0
    AWSAccessKeyId=...
    Signature=...
    SignatureMethod=HmacSHA256
    SignatureVersion=2
    Timestamp=2014-04-16T07%3A43%3A21Z
    Version=2013-10-15
OpenStack/delete security group: Accept ACCEPTED

According to https://wiki.openstack.org/wiki/Os-security-groups#Delete_Security_Group
and my own experiments with the HP cloud, the provider's answer upon success is
not NO_CONTENT (HTTP status code 204) but ACCEPTED (HTTP status code 202).

So I modified to code to accept ACCEPTED. I still kept NO_CONTENT (I would
think it was put there because some provider did return NO_CONTENT).
Add "floating IP" functions to the OpenStack provider

The Compute API of the HP Cloud used by Libcloud [1] does not support floating IP
pools, but it does support floating IPs. (To be more precise, one needs to use
floating IPs if he wants to access the instance from outside the cloud.)

So I added floating ip handling methods to the OpenStack_1_1_NodeDriver class.

[1] HP Helion Public Cloud v13.5 Compute Service:
https://docs.hpcloud.com/api/v13/compute/#3.10Extensions
Add import_key_pair_from_string to DummyNodeDriver