nova CCI metadata / user-data / personality cloud-init mitigation

As I'm sure you guys know, OpenStack nova compute supports the ability
to pass through the following data on a boot VM call:

* User Data http://docs.openstack.org/user-guide/content/user-data.html
* Arbitrary key/value pairs as metadata
http://docs.openstack.org/grizzly/openstack-compute/admin/content/instance-data.html
* Server personality
http://docs.openstack.org/api/openstack-compute/2/content/Server_Personality-d1e2543.html

In an OpenStack proper environment such "metadata" is typically realized
using something like Cloud-Init + Config Drive
(http://cloudinit.readthedocs.org/en/latest/topics/datasources.html#config-drive).

In SoftLayer we obviously have the CCI user metadata service to pass
arbitrary data through and make it accessible to a CCI. However, to the
best of my knowledge there is no support integrating Cloud-Init +
SoftLayer CCI user metadata. This leaves us with a gap in the SoftLayer
/ nova compute space -- how to realize nova metadata customization on a
CCI via Jumpgate.

To me an ideal solution would be to implement a datasource
(http://cloudinit.readthedocs.org/en/latest/topics/datasources.html)
provider for Cloud-Init which is compatible with SoftLayer's CCI user
metadata. However such an implementation is likely a bit of work.

As a mitigation I have implemented a simple 'cci_init' python script
which can realize all 3 flavors of nova metadata in it's simplest form
-- it realizes raw metadata but does not support any "active
capabilities" of Cloud-Init. We have been using this cci_init in our
SoftLayer RDS implementation and thus I feel it provides a stopgap for
some of the metadata functionality in the nova / Jumpgate space.
reduce json rest client class into function + fix flake8 issues
fix cci_init user_data and metadata bugs
Merge pull request #62 from bodenr/bodenr/cci-init

nova CCI metadata / user-data / personality cloud-init mitigation