xencontrol: Fix return values and simplify failure paths
XcGnttabRevokeForeignAccess() and XcGnttabUnmapForeignPages()
could return error values even when the calls succeeded. This was because
GetLastError() was used to get the return value even if the previous call
to DeviceIoControl() succeeded.
This commit also reworks all xencontrol functions to use simpler control
paths in failure cases.