<!--- Verify first that your feature was not already discussed on GitHub -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Describe the new feature/improvement briefly below -->
Support NetApp StorageGRID

##### ISSUE TYPE
- Feature Idea

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
s3_bucket

##### ADDITIONAL INFORMATION
<!--- Describe how the feature would be used, why it is needed and what it would solve -->
StorageGRID provides S3 REST API, but it's not fully-compatible with AWS API.
Current StorageGRID 11.3 does not have Requester Pays and tags feature, furthermore, the API returns XNotImplemented error instead of the standard NotImplemented error.
http://docs.netapp.com/sgws-113/topic/com.netapp.doc.sg-s3/GUID-6E737B19-441A-495F-A35C-9BDC8BA1A4A2.html
Here is the error message that s3_bucket module in ansible 2.9.5 outputs:
<!--- Paste example playbooks or commands between quotes below -->
```
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: botocore.exceptions.ClientError: An error occurred (XNotImplemented) when calling the GetBucketRequestPayment operation: The request you provided implies functionality that is not implemented.
fatal: [localhost]: FAILED! => {"boto3_version": "1.12.0", "botocore_version": "1.15.0", "changed": false, "error": {"code": "XNotImplemented", "message": "The request you provided implies functionality that is not implemented.", "resource": "/ansible-bucket-0217?requestPayment"}, "msg": "Failed to get bucket request payment: An error occurred (XNotImplemented) when calling the GetBucketRequestPayment operation: The request you provided implies functionality that is not implemented.", "resource_actions": ["objectstorage-s:CreateBucket", "objectstorage-s:GetBucketVersioning", "objectstorage-s:ListBuckets", "objectstorage-s:GetBucketRequestPayment", "objectstorage-s:HeadBucket"], "response_metadata": {"host_id": "12889128", "http_headers": {"cache-control": "no-cache", "connection": "keep-alive", "content-length": "267", "content-type": "application/xml", "date": "Mon, 17 Feb 2020 08:15:45 GMT", "x-amz-id-2": "12889128", "x-amz-request-id": "1581927345613682",  "http_status_code": 501, "request_id": "1581927345613682", "retry_attempts": 0}}

```

<!--- HINT: You can also paste gist.github.com links for larger files -->

except BotoCoreError as exp:
        module.fail_json_aws(exp, msg="Failed to get bucket tags")
    except ClientError as exp:
        if exp.response['Error']['Code'] != 'NotImplemented' or tags is not None:
            module.fail_json_aws(exp, msg="Failed to get bucket tags")
    else:
        if tags is not None:
            
            tags = dict((to_text(k), to_text(v)) for k, v in tags.items())
            if not purge_tags:
                
                current_copy = current_tags_dict.copy()
                current_copy.update(tags)
                tags = current_copy
            if current_tags_dict != tags:
                if tags:
                    try:
                        put_bucket_tagging(s3_client, name, tags)
                    except (BotoCoreError, ClientError) as e:
                        module.fail_json_aws(e, msg="Failed to update bucket tags")
                else:
                    if purge_tags:
                        try:
                            delete_bucket_tagging(s3_client, name)
                        except (BotoCoreError, ClientError) as e:
                            module.fail_json_aws(e, msg="Failed to delete bucket tags")
                current_tags_dict = wait_tags_are_applied(module, s3_client, name, tags)
                changed = True
        result['tags'] = current_tags_dict