Add idmap to libvirt config

Allows Nova to configure libvirt domains with id map
elements. This allows user namepsaces to be enabled
and configured.

Partially implements: bp libvirt-lxc-user-namespaces

Change-Id: I4dbbc5e265e2caa17e32ff40cb3c5f5bb51d6548
Add functions to setup user namespaced filesystems

When using user namespaces, the contents of the container's
file systems need to be owned by the targeted user on the host.
These functions will change the ownership of the files in the
filesystem to the proper owners.

For example, when mapping root in the container to user 500
on the host, the contents of the filesystem owned by root need
to be changed to be owned by user 500.

Partially implements: bp libvirt-lxc-user-namespaces

Change-Id: I78afc2686f17b5e5ec740a3d0a1963df7cc92755
Add unit tests for libvirt domain creation

Tests for:
nova.virt.libvirt.driver.LibvirtDriver.get_guest_config
nova.virt.libvirt.driver.LibvirtDriver._create_domain

Change-Id: I4aada9ac06cd423b04a4c6136165c65e64e378aa
Add user namespace support for libvirt-lxc

This change adds two config values that allow deployers
to enable user namespacing for libvirt-lxc containers.
User namespacing allows the mapping of uids and gids in
a container to separate uids and gids outside of the
container. The main advantage of this is to allow a
container's processes to appear to be running as root,
while actually running as a different user on the host.

Implements: bp libvirt-lxc-user-namespaces

DocImpact: This adds two config options to the libvirt
group, uid_maps and gid_maps. Default values are empty
strings and will leave user namespacing disabled for
libvirt-lxc containers.

Change-Id: I5f517f228b477f8238eccbb604b9ffd0ebaa5927