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
Prevent admin role leak in context.elevated

context.elevated was creating a copy of the current context then adding
'admin' to the roles of that context. This should be a deepcopy, otherwise
'admin' is added to the original context too.

Change-Id: I8ab00c88a8e76a14fb9f4ae96dfdb5f018fc2d0f
Closes-bug: 1386932
objects: Add test for instance _save methods

7335af1ea fixes a bug with the instance save() and when it would call
the related _save methods for related objects.

This patch adds a test for it so that we are sure it does not regress.

Change-Id: Ie4b731b4b419725482b64b7aa1f19e7c5474c349
Merge "Introduce a .z version element for backportable objects"
Merge "objects: Add test for instance _save methods"
Merge "Prevent admin role leak in context.elevated"