[vsphere] Use the server_id in interfaces.

Using a reference to the server object in the interfaces model leads
to a circular dependency when calling .inspect() on the server.

Specifically, every server object has a reference to an interfaces
collection. Each instance of the collection has a reference to the
server object. When attempting to print out the object (in CLI or by
calling .inspect()), this results in a loop: the server object's
attributes are printed, which calls .inspect() on the interfaces
field, which in turn calls .inspect() on the server field, and so on.

The patch makes a functional change to address this. The interfaces
class now expects a server_id (which can be retrieved with server.id).
The id is used internally when performing any lookups for that VM.

The patch also adds server() and server=() helpers, such that callers
that rely on this functionality will not break.

Refs: #2938
[vsphere] Use server_id in the Volumes collection.

If a reference to the Vsphere::Server object is passed explicitly, to
the Vsphere::Volumes collection, a loop is introduced when attempting
to print out the Vsphere::Server object. The attributes for the server
will include a reference to the Vsphere::Volumes collection, which in
turn includes a reference to the server object.

As opposed to passing a reference to the Vsphere::Server object to
the Vsphere::Volumes collection, this patch modifies the interface to
expect a Vsphere:Server ID. The ID is used to perform any subsequent
lookups of the server object -- if required.

Fixes: #2938