Introduce a .z version element for backportable objects

This makes the object versioning code tolerate a .Z element to the version.
It is ignored for the purposes of triggering a backport, which means that we
can backport additive changes to a stable tree, denoted by the .Z element,
but which will not cause version comparisons to consider them incompatible.

There isn't actually much to change to make this work properly, aside from
avoiding a backport for only a .z in NovaObjectSerializer. Most of this patch
is actually just adding unit tests to prove that we tolerate the .z in the
version element in our compares, as well as confirming that extra stuff in
the data portion is ignored if our local object implementation doesn't know
about it.

Change-Id: Ic71268c036432c42f0d0ce7dfcb427abb65a24b4
Merge "Introduce a .z version element for backportable objects"