<!--- 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 -->

import time
from ansible.module_utils.six.moves.urllib.parse import urlparse
from ansible.module_utils.six import string_types
from ansible.module_utils.basic import to_text
from ansible.module_utils.aws.core import AnsibleAWSModule, is_boto3_error_code
from ansible.module_utils.ec2 import compare_policies, ec2_argument_spec, boto3_tag_list_to_ansible_dict, ansible_dict_to_boto3_tag_list
from ansible.module_utils.ec2 import get_aws_connection_info, boto3_conn, AWSRetry
try:
    from botocore.exceptions import BotoCoreError, ClientError, EndpointConnectionError, WaiterError
except ImportError:
    pass  
def create_or_update_bucket(s3_client, module, location):
    policy = module.params.get("policy")
    name = module.params.get("name")
    requester_pays = module.params.get("requester_pays")
    tags = module.params.get("tags")
    purge_tags = module.params.get("purge_tags")
    versioning = module.params.get("versioning")
    encryption = module.params.get("encryption")
    encryption_key_id = module.params.get("encryption_key_id")
    changed = False
    result = {}
    try:
        bucket_is_present = bucket_exists(s3_client, name)
    except EndpointConnectionError as e:
        module.fail_json_aws(e, msg="Invalid endpoint provided: %s" % to_text(e))
    except (BotoCoreError, ClientError) as e:
        module.fail_json_aws(e, msg="Failed to check bucket presence")
    if not bucket_is_present:
        try: