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

""" Return True if s3_url has scheme fakes3:// """
    if s3_url is not None:
        return urlparse(s3_url).scheme in ('fakes3', 'fakes3s')
    else:
        return False
def get_s3_client(module, aws_connect_kwargs, location, ceph, s3_url):
    if s3_url and ceph:  
        ceph = urlparse(s3_url)
        params = dict(module=module, conn_type='client', resource='s3', use_ssl=ceph.scheme == 'https', region=location, endpoint=s3_url, **aws_connect_kwargs)
    elif is_fakes3(s3_url):
        fakes3 = urlparse(s3_url)
        port = fakes3.port
        if fakes3.scheme == 'fakes3s':
            protocol = "https"
            if port is None:
                port = 443
        else:
            protocol = "http"
            if port is None:
                port = 80
        params = dict(module=module, conn_type='client', resource='s3', region=location,
                      endpoint="%s://%s:%s" % (protocol, fakes3.hostname, to_text(port)),
                      use_ssl=fakes3.scheme == 'fakes3s', **aws_connect_kwargs)
    else:
        params = dict(module=module, conn_type='client', resource='s3', region=location, endpoint=s3_url, **aws_connect_kwargs)
    return boto3_conn(**params)
def main():