Update db to have more than one ephemeral devices

This patch changes the database api behaviour when creating/updating a
block_device_mapping so it doesn't override old ephemeral devices when
adding a new one.

blueprint: improve-block-device-handling

Change-Id: I71c283cbd5ad3d28a27d06cb01b5ba9433f8ab46
Allow BDMs with an empty device_name

This patch removes the check in the API that prevented having block
devices without 'device_name'.

Once in the manager, when preparing the block devices, they will be
populated if empty by asking the driver for a proper device name for the
curent hypervisor and taking care to not overlap with any other used
device name.

This patch adds also a new method in the compute driver that will be
providing the device names. This must be overriden by drivers willing
to support empty device names. By default the driver will fail if a
block device's device_name is empty.

TODO: test _fix_block_device_names

blueprint: improve-block-device-handling

Change-Id: I84541f8ff6e1b5978734e5def69946d014c66fdf
libvirt driver capable of generating device names

Implement the method from the base driver class to let libvirt
provide device names if the manager requests them.

This allows users to boot an instance without having to care about
device names and delegating that task to the compute driver.

blueprint: improve-block-device-handling

Change-Id: I2b4f2ea6a4d2e4133e0ba12edabaa754744b8fa4