### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When using the image localstack/localstack:0.13.3

1. When calling SQS **ChangeMessageVisibility** with a receipt handle that is not properly formatted, the error response is `ReceiptHandleIsInvalid`. (_This is correct behavior_.)
2. When calling SQS **ChangeMessageVisibility** with a receipt handle that is properly formatted but does not actually exist, the error response is `ReceiptHandleIsInvalid`.
3. When using the AWS .NET SDK with either of the above, the SDK code goes into an infinite loop trying to parse the error response.



### Expected Behavior

1. When calling SQS **ChangeMessageVisibility** with a receipt handle that is not properly formatted, the error response should be `ReceiptHandleIsInvalid`.
2. When calling SQS **ChangeMessageVisibility** with a receipt handle that is properly formatted but does not actually exist, the error response should be `InvalidParameterValue`.
3. When using the AWS .NET SDK with either of the above, the SDK code should not go into an infinite loop trying to parse the error response.

### How are you starting LocalStack?

Custom (please describe below)

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

If used the [Ductus.FluentDocker](https://github.com/mariotoffia/FluentDocker) library to create the container. I believe in the end it uses `docker run`. The actual image that was used is localstack/localstack:0.13.3

#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

(I did not use `awslocal` but rather `aws --endpoint-url=...`. I hope that's OK. :-)

Here is the repro with LocalStack:

```
C:\>aws --endpoint-url="http://localhost:4566" sqs create-queue --queue-name MyQueue
{
    "QueueUrl": "http://localhost:4566/000000000000/MyQueue"
}

C:\>aws --endpoint-url="http://localhost:4566" sqs send-message --queue-url http://localhost:4566/000000000000/MyQueue --message-body "{}"
{
    "MD5OfMessageBody": "99914b932bd37a50b983c5e7c90ae93b",
    "MessageId": "e1a53d04-fc0e-4a87-fa0c-85291ab017ac"
}

C:\>aws --endpoint-url="http://localhost:4566" sqs receive-message --queue-url http://localhost:4566/000000000000/MyQueue
{
    "Messages": [
        {
            "MessageId": "e1a53d04-fc0e-4a87-fa0c-85291ab017ac",
            "ReceiptHandle": "pjkzjurnqzvcrvusgkcnxclzkszvipcfifkaukrltjsjcfsjicagkqbxvwmzrresvdvqanbbqueqxelfvvfuubuhnutgtyyyseswmgobmkdejggkmxmskmmhjqxywhscfecrspsncaimlumjxvcbhksudipxqvwkqgkfrrnypdcdbdldoejonkpvg",
            "MD5OfBody": "99914b932bd37a50b983c5e7c90ae93b",
            "Body": "{}"
        }
    ]
}

C:\>aws --endpoint-url="http://localhost:4566" sqs delete-message --queue-url http://localhost:4566/000000000000/MyQueue --receipt-handle pjkzjurnqzvcrvusgkcnxclzkszvipcfifkaukrltjsjcfsjicagkqbxvwmzrresvdvqanbbqueqxelfvvfuubuhnutgtyyyseswmgobmkdejggkmxmskmmhjqxywhscfecrspsncaimlumjxvcbhksudipxqvwkqgkfrrnypdcdbdldoejonkpvg

C:\>aws --endpoint-url="http://localhost:4566" sqs change-message-visibility --queue-url http://localhost:4566/000000000000/MyQueue --receipt-handle pjkzjurnqzvcrvusgkcnxclzkszvipcfifkaukrltjsjcfsjicagkqbxvwmzrresvdvqanbbqueqxelfvvfuubuhnutgtyyyseswmgobmkdejggkmxmskmmhjqxywhscfecrspsncaimlumjxvcbhksudipxqvwkqgkfrrnypdcdbdldoejonkpvg --visibility-timeout 30

An error occurred (ReceiptHandleIsInvalid) when calling the ChangeMessageVisibility operation: The input receipt handle is invalid.

C:\>aws --endpoint-url="http://localhost:4566" sqs change-message-visibility --queue-url http://localhost:4566/000000000000/MyQueue --receipt-handle garbage --visibility-timeout 30

An error occurred (ReceiptHandleIsInvalid) when calling the ChangeMessageVisibility operation: The input receipt handle is invalid.
```

Here is the repro with real AWS. My queue was created with the AWS console. 
```
C:\>aws sqs send-message --queue-url <my-queue-url> --message-body "{}"
{
    "MD5OfMessageBody": "99914b932bd37a50b983c5e7c90ae93b",
    "MessageId": "645cb14e-6cc2-40e8-a934-bf5b82bf8169"
}

C:\>aws sqs receive-message --queue-url <my-queue-url>
{
    "Messages": [
        {
            "MessageId": "645cb14e-6cc2-40e8-a934-bf5b82bf8169",
            "ReceiptHandle": "AQEBRv9C815p34ggarmRAxrMMpvTA4U9e5GjQmqOQTWnO9QfCzzJaJ6sCzEfpyrXBTpdSTBbrBbKduvyonWS6TPbNagBwKMjIBKtA7sKv4P+/vJI0/0mX/Fc4jyPjzOrYaxs7IMACKmotNWgP1nrFQ3MUHIMzRVG3QNqmb3awA0g6S22QJDH85gSUqgGUNUt8IiTwW7wVdS1T4vVRnLtKhl0IMzvEJfsPHjbQU7uTrD8OmzbleegHjb4/Q4ibnxemoEtRutRlxGuP6j+FtLsrR6m8x2H6rdL1jeZBf831QQCFr1lH8qfkVhaz6AJpbYB0R1L/JRkbWxpbyIItSV1rA0I3WipGStr/5EGGM+Fmq4rJf2m/krcrWZVV20oJJNc9nNH19RB+xxN2cLBjXG/02OHmm8Kg8tfYD2D5FQ951Pgi0s=",
            "MD5OfBody": "99914b932bd37a50b983c5e7c90ae93b",
            "Body": "{}"
        }
    ]
}

C:\>aws sqs delete-message --queue-url <my-queue-url> --receipt-handle AQEBRv9C815p34ggarmRAxrMMpvTA4U9e5GjQmqOQTWnO9QfCzzJaJ6sCzEfpyrXBTpdSTBbrBbKduvyonWS6TPbNagBwKMjIBKtA7sKv4P+/vJI0/0mX/Fc4jyPjzOrYaxs7IMACKmotNWgP1nrFQ3MUHIMzRVG3QNqmb3awA0g6S22QJDH85gSUqgGUNUt8IiTwW7wVdS1T4vVRnLtKhl0IMzvEJfsPHjbQU7uTrD8OmzbleegHjb4/Q4ibnxemoEtRutRlxGuP6j+FtLsrR6m8x2H6rdL1jeZBf831QQCFr1lH8qfkVhaz6AJpbYB0R1L/JRkbWxpbyIItSV1rA0I3WipGStr/5EGGM+Fmq4rJf2m/krcrWZVV20oJJNc9nNH19RB+xxN2cLBjXG/02OHmm8Kg8tfYD2D5FQ951Pgi0s=

C:\>aws sqs change-message-visibility --queue-url <my-queue-url> --receipt-handle AQEBRv9C815p34ggarmRAxrMMpvTA4U9e5GjQmqOQTWnO9QfCzzJaJ6sCzEfpyrXBTpdSTBbrBbKduvyonWS6TPbNagBwKMjIBKtA7sKv4P+/vJI0/0mX/Fc4jyPjzOrYaxs7IMACKmotNWgP1nrFQ3MUHIMzRVG3QNqmb3awA0g6S22QJDH85gSUqgGUNUt8IiTwW7wVdS1T4vVRnLtKhl0IMzvEJfsPHjbQU7uTrD8OmzbleegHjb4/Q4ibnxemoEtRutRlxGuP6j+FtLsrR6m8x2H6rdL1jeZBf831QQCFr1lH8qfkVhaz6AJpbYB0R1L/JRkbWxpbyIItSV1rA0I3WipGStr/5EGGM+Fmq4rJf2m/krcrWZVV20oJJNc9nNH19RB+xxN2cLBjXG/02OHmm8Kg8tfYD2D5FQ951Pgi0s= --visibility-timeout 30

An error occurred (InvalidParameterValue) when calling the ChangeMessageVisibility operation: Value AQEBRv9C815p34ggarmRAxrMMpvTA4U9e5GjQmqOQTWnO9QfCzzJaJ6sCzEfpyrXBTpdSTBbrBbKduvyonWS6TPbNagBwKMjIBKtA7sKv4P+/vJI0/0mX/Fc4jyPjzOrYaxs7IMACKmotNWgP1nrFQ3MUHIMzRVG3QNqmb3awA0g6S22QJDH85gSUqgGUNUt8IiTwW7wVdS1T4vVRnLtKhl0IMzvEJfsPHjbQU7uTrD8OmzbleegHjb4/Q4ibnxemoEtRutRlxGuP6j+FtLsrR6m8x2H6rdL1jeZBf831QQCFr1lH8qfkVhaz6AJpbYB0R1L/JRkbWxpbyIItSV1rA0I3WipGStr/5EGGM+Fmq4rJf2m/krcrWZVV20oJJNc9nNH19RB+xxN2cLBjXG/02OHmm8Kg8tfYD2D5FQ951Pgi0s= for parameter ReceiptHandle is invalid. Reason: Message does not exist or is not available for visibility timeout change.

C:\>aws sqs change-message-visibility --queue-url <my-queue-url> --receipt-handle garbage --visibility-timeout 30

An error occurred (ReceiptHandleIsInvalid) when calling the ChangeMessageVisibility operation: The input receipt handle "garbage" is not a valid receipt handle.
```

### Environment

```markdown
- OS: Windows 10.0.19044 Build 19044
- LocalStack: 0.13.3
```

Note that the "infinite loop" behavior I'm referring to seems to have been introduced with localstack 0.12.19. localstack 0.12.18 does not exhibit the "infinite loop" behavior. The "not matching AWS" behavior is in all the versions I tested.

### Anything else?

There are two main parts to this:

### Incorrect Error Response

This [AWS Java SDK issue](https://github.com/aws/aws-sdk-java/issues/1628) explains the two different error responses for **ChangeMessageVisibility**. "Invalid" is a tricky word here. I've referred to the first error as "not properly formatted". What I mean is that receipt handles are normally really long strings (for real AWS they appear to be base64 strings). So we know a string like "garbage" is not a real receipt handle. That's what AWS means by "invalid". But you could have a "properly formatted" receipt handle that's still not a real receipt handle. For example, the receipt handle for a message that's previously been deleted. That's how I reproduce this issue. 

We have some production code that depends on this behavior. We have a race condition between code that deletes messages and code that changes the visibility on messages. This bug in LocalStack means I cannot integration test this code.

### Infinite Loop in .NET SDK

In the AWS .NET SDK, error responses are unmarshalled by two key classes for our purposes: [ErrorResponseUnmarshaller](https://github.com/aws/aws-sdk-net/blob/475822dec5e87954b7a47ac65995714ae1f1b115/sdk/src/Core/Amazon.Runtime/Internal/Transform/ErrorResponseUnmarshaller.cs) and [XmlUnmarshallerContext](https://github.com/aws/aws-sdk-net/blob/475822dec5e87954b7a47ac65995714ae1f1b115/sdk/src/Core/Amazon.Runtime/Internal/Transform/UnmarshallerContext.cs). 

The code expects the XML response to be formatted in a certain way. In particular, it does not seem to deal with whitespace between elements. If whitespace is present in the wrong place in the XML, it goes into an infinite loop. I found this by cloning the AWS .NET SDK and fiddling their SQS unit tests and stepping through the client code.

Here is the response XML from real AWS:
```
<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>ReceiptHandleIsInvalid</Code><Message>The input receipt handle &quot;garbage&quot; is not a valid receipt handle.</Message><Detail/></Error><RequestId>bd34a56b-d17a-552a-b343-ff0b22169609</RequestId></ErrorResponse>
```

Note how there are no newlines or spaces.

Here is the response XML from LocalStack:
```
<?xml version="1.0" encoding="UTF-8"?>
  <ErrorResponse>
    <Errors>
      <Error>
        <Code>ReceiptHandleIsInvalid</Code>
        <Message><![CDATA[The input receipt handle is invalid.]]></Message>
        
      </Error>
    </Errors>
  <RequestId>03D34ALJ80TB0D5YUQ9IBUAOTFSYZN74Y5S20JRFIPICJ0SNSW7T</RequestId>
</ErrorResponse>
```

Note how there are newlines and indenting. What looks like a blank line actually had eight spaces on it. The .NET code seems to fail due to that line with the eight spaces.



queue_url = sqs_create_queue()
        response = sqs_http_client.get(
            queue_url,
            params={
                "Action": "FooBar",
                "Version": "2012-11-05",
            },
        )
        assert not response.ok
        assert "<Code>InvalidAction</Code>" in response.text
        assert "<Type>Sender</Type>" in response.text
        assert (
            "<Message>The action FooBar is not valid for this endpoint.</Message>" in response.text
        )
    @pytest.mark.aws_validated
    def test_valid_action_with_missing_parameter_raises_exception(