xenapi: move StorageError into global exception.py

We have our own exception for StorageErrors, and this is causing some
interesting dependency issues, so seems best to move this exception into
the more usual place.

Change-Id: I4f1f33e95f1050874ef828af9b35b0edbf8f0176
xenapi: remove calls to call_xenapi in volumeops

As part of the move to remove calls to call_xenapi, this removes calls
in volumeops. This makes the later refactoring and test coverage patches
much easier to write.

Change-Id: I384d7d85382551d32122d475768f015e8dfd8769
xenapi: refactor volumeops attach

Refactor the attach code, so its more readable.

At the same time, add some new unit tests to better cover the volume
attach code.

In a later patch we will remove the older mox tests, and dead code that
is now only left in volumeops to keep those old tests running.

Change-Id: Ic50dba5588bb968eca3ac2bf94c3eb719fa2cf6b
Merge "xenapi: move StorageError into global exception.py"
Merge "xenapi: remove calls to call_xenapi in volumeops"
Merge "xenapi: refactor volumeops attach"