Make object compat work with more positional args

Currently object_compat would break if there is more than one positional
argument after instance, since the instance will be passed as a keyword
argument and there will be a positional argument passed as instance,
once we get to the actual function call - a TypeError will be thrown
similar to:

    TypeError: ... got multiple values for keyword argument 'instance'

This patch makes sure that the instance (if not found in kwargs) is put
back in the args tuple.

Change-Id: I5e9085e9f1bc1502f627eb9b206376cf39d58f39
XenAPI: Speedup host_ref cannot change - get it once

The host we run on is fixed - getting this each time from XAPI
is expensive

Change-Id: Ifee9a778f3ed855ef52b001de3fc2ebbd0b972cf
XenAPI: get_info was very expensive

Getting the whole VM record is expensive and slowed down Tempest tests
significantly.

Change-Id: I93bcef5b692a531aac41518dc29d5d4f46cded65
XenAPI: Tidy calls to get_all_ref_and_rec

Use in fewer places, and where it is still used, use the more
efficient get_all_records

Change-Id: I4725c3f1fdebdf1737941cb7db69b19afb22df9f
XenAPI: Speedup get_vhd_parent_uuid

In many cases the VDI record has already been retrieved.
Use it rather than expensively getting a new VDI record from XAPI.

Change-Id: I469e2a415c1f1924010f47d3927ca18c45a7b8f8
XenAPI: Reduce calls to sr_scan

These are expensive and not needed in the scenarios here

Change-Id: I2aeda6e2b7a001ac23ee486495592e242bc078ba
XenAPI: get_XYZ is faster than get_record

Replace multiple calls to use get_XYZ in preference.

Change-Id: I52e20c4f4c9d6a6ad019694916ee057cc96b18a6