Mapping for errors

**Note**: this commit changes libvirt.GetLastError() return value. I'm not sure if it's OK to break API compatibility. Otherwise, we could try to find another name for it.

Changed GetLastError to return VirError instead of a simple string.
VirError helps getting easy access to the error code, level and domain.
VirError implements the error interface for easy use.