SMI-S plugin: access group enhancement
SMI-S plugin: access group enhancement

Big changes:
    1. Access Group could from one of these CIM class:
        CIM_SCSIProtocolController
            # For fallback or only support 'Masking and Mapping' profile
            # arrays. In real world, it means most of arrays.
        CIM_InitiatorMaskingGroup
            # For 1.5+ 'Group Masking and Mapping' profile.
            # In real world, it means EMC VMAX only.
            # A EMC Bug found on EMC VNX/CX which incorrect indicate
            # support of Group M&M profile, bug reported and work around
            # implemented.
       # The reason to do this is because EMC VMAX does not allow to create
       # SPC with no volume masked.
       # Actually, 'Group M&M' profile is clearer and easier for use than
       # old 'M&M' profile. I will try to beg vendors to support that profile.

    2. Fix old access_group_initiator_add() and
       access_group_initiator_delete() to return None instead of job id.

    3. New methods:
        access_group_create()
        access_group_delete()

Detail changes:
    1. Use _mask_type() to indicate the support of Group M&M.
    2. These methods support both 'Group' way and old way:
        volume_mask()
        volume_unmask()
        access_groups()
        access_group_initiator_add()
        access_group_initiator_delete()
    3. Quick notes for 'Group M&M' profile:
       SPC(SCSIProtocolController) contain three groups:
        a InitiatorMaskingGroup
            # Containing Initiators.
        b TargetMaskingGroup
            # Containing target ports. Currently we expose to all ports.
        c DeviceMaskingGroup
            # Containing masked volumes.

    4. New method _wait_invoke() to allow wait cim_job done.
    5. Remove support of this method on EMC VNX/CX:
        access_group_initiator_add()
       # EMC VNX/CX require WWNN define when add initiator which is not
       # supported by LSM yet. We have no intention to do so, WWPN should
       # the only identifier for FC and FCoE, we should not confuse user
       # with one vendor extension.

Tested on:
    1. EMC VMAX:
        volume_mask()
        volume_unmask()
        access_groups()
        access_group_initiator_add()
        access_group_initiator_delete()
        access_group_create()
        access_group_delete()
    2. EMC VNX:
        volume_mask()
        volume_unmask()
        access_groups()

TODO:
 * I will submit another patch soon for lsm.Client.capabilities() call about
   access group.
 * The SMI-S plugin is too big to maintain. We(at least I) should split it
   into several files/modules.

Signed-off-by: Gris Ge <e24f3acbe39bf94f92e8af3c48f8852106ad5ad7@redhat.com>

lazy404/libstoragemgmt,jumitche/libstoragemgmt,jumitche/libstoragemgmt,libstorage/libstoragemgmt,joehandzik/libstoragemgmt,cathay4t/libstoragemgmt,HP-Scale-out-Storage/libstoragemgmt,jumitche/libstoragemgmt,lazy404/libstoragemgmt,HP-Scale-out-Storage/libstoragemgmt,tasleson/libstoragemgmt,lazy404/libstoragemgmt,cathay4t/libstoragemgmt,libstorage/libstoragemgmt,HP-Scale-out-Storage/libstoragemgmt,tasleson/libstoragemgmt,HP-Scale-out-Storage/libstoragemgmt,tasleson/libstoragemgmt,libstorage/libstoragemgmt,joehandzik/libstoragemgmt,cathay4t/libstoragemgmt,libstorage/libstoragemgmt,tasleson/libstoragemgmt,joehandzik/libstoragemgmt,cathay4t/libstoragemgmt,lazy404/libstoragemgmt,libstorage/libstoragemgmt,joehandzik/libstoragemgmt,jumitche/libstoragemgmt,tasleson/libstoragemgmt,cathay4t/libstoragemgmt,jumitche/libstoragemgmt