Add support for CloudStack metadata

The required information is available from an API exposed by CloudStack
on the virtual router IP address (DHCP Server).
After obtaining the IP address all the metadata is taken from the API.

Implements-Blueprint: cloudstack-metadata

Change-Id: I428860fe0e9a53649c21fcb23595b304341eb7f1
Add support for yaml user-data

CloudConfigPlugin receives information serialized into YAML format.
The information is deserialized and for each key value pair a
specialized plugin is called for processing this kind of task.

Implements-Blueprint: yaml-userdata

Change-Id: I273bc28415bc7fb37b2ef426868250ad152faec1
Fixes unicode logging decoding issue

Logging fails with an exception when unicode conversion of the message
cannot be performed.

This includes also Exception objects, where the exception message has
an unknown encoding.

The calling code should be responsible for handling the unicode encoding, but
nevertheless, the logging module should handle this scenario and not raise
an exception.

Closes-Bug: #1393870

Change-Id: Ied46e4a8715d11a3cf59d651004e17f6fe4c760b
Merge "Add support for CloudStack metadata"
Merge "Add support for yaml user-data"
Fixes encoding issue

Logging fails when using non-ASCII characters. This gives the option
of decoding the output of system calls.

Closes-Bug: #1382047
Change-Id: Ieb43b2ce4765975ee93da528ad3cb95b27d6285a
Merge "Fixes encoding issue"
Add support for specific network configuration

The networkconfig plugin can now handle custom NetworkDetails
objects that contain data like IP address, gateway, broadcast etc.

Change-Id: Ife3f8f62b47704e7f25e0304b15953d6f06e8620
Add support for OpenNebula meta-data

All the needed details are taken from a context script file
found on a ISO mounted inside the VM.

Change-Id: I2259159ea09e03e17a0c98d2fe7039f597be9190