Use objects internally in DriverBlockDevice class

This patch makes DriverBlockDevice use objects to do the database
updates. The object will be kept as a private object attribute and the
only change in the external API of the DriverBlockDevice objects is an
addition of the save() method.

This patch also removes the block_device_mapping_update method from the
VirtAPI class as that functionality can now be handled by
DriverBlockDeviceDict class (using BlockDeviceMapping objects
internally).

Also cleans up tests and simplifies some code in the libvirt driver that was
relying on virtapi to do the db updates.

Related to blueprint: icehouse-objects
Related to blueprint: clean-up-legacy-block-device-mapping

Change-Id: Ibafd1a05fb1050349ad12c0cafac77f64a8e96d8
Add 'icehouse-compat' to [upgrade_levels] compute=

Add support for the 'icehouse-compat' value for the compute
configuration option in the [upgrade_levels] configuration option group.
This option is set during a live upgrade from havana to icehouse to
ensure that compute messages are sent that both havana and icehouse
understand.

This is added to stable/havana in this change id:
If09bd38c9d8c3beb5b95107c497699dec47aa3ef

DocImpact

Change-Id: Ic6656457afced20bff2f23c03493e72a96a00fb9
Merge "Add 'icehouse-compat' to [upgrade_levels] compute="
Merge "Use objects internally in DriverBlockDevice class"