core: Extract SD validations from ImagesHandler

Extracted the logic to perform validations on Storage Domains from
ImagesHandler.PerformImagesChecks, and made the relevant commands use it
directly.

In order to do this, a new type of validator was introduced,
MultipleStorageDomainsValidator, which aggregates validations from
individual StorageDomainValidators in a fast-fail pattern. This is done
for performance reasons, so there is no need to load all the storage
domains from the database preemptively.

This refactoring removes three parameters from PerformImagesChecks:
* checkStorageDomain and diskSpaceCheck - are now done directly by
  MultipleStorageDomainsValidator.
* storageDomainId - is used by the previous two checks, and by the image
  existence check. However, it is always equal to the storage domain id
  member of the DiskImage, so it is redundant as an additional
  parameter.

The changes in the commands are as follows:
* The parameters detailed above were removed from the
  ImagesHandler.PerformImagesCheck calls.
* Wherever appropriate, a direct call to StorageDomainValidator or
  MultipleStorageDomainsValidator was added.

Change-Id: I4cfc895dceed4de520476ed5e3fa9c1c7cfd78f4
Signed-off-by: Allon Mureinik <amureini@redhat.com>
core: Remove PerformImagesChecks from AddDisk

Several previous patches have removed checks not related to DiskImages
from PerformImagesChecks (The last one being change id
I4cfc895dceed4de520476ed5e3fa9c1c7cfd78f4, that removed storage domain
validation).

Now, since PerformImagesChecks only checks DiskImages, passing an
emptyList() to it is meaningless, and can safely be removed.

Change-Id: I457dee7645dd16c430eda6886e03df77c7e91383
Signed-off-by: Allon Mureinik <amureini@redhat.com>
core: Unfilter ImagesHandler.PerformImagesChecks

Before this patch, ImagesHandler.PerformImagesChecks received a
collection of Disks, and filtered them so only DiskImages that aren't
sharable were evaluated.

This patch removes the filtering from this methods, and makes it the
responsibility of the calling method to perform any required filtering.
This patch also adds said filtering wherever relevant, so no behavior is
changed.

This achieves two goals:
1. Added flexibility, to allow possible validation on sharable disks.
2. A clearer API - it is now clear, in compile time, that this method
   only performs validations on DiskImages, as opposed to the way it
   was before the patch, where the function could be passed a faulty
   (e.g., non-existent) LunDisk, which would just be silently ignored.

Change-Id: Icc93d1bb72daed053f0f37ae3c3f12efef915669
Signed-off-by: Allon Mureinik <amureini@redhat.com>