<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->

# Type of request: This is a ...

[ X ] bug report
[ ] feature request

# Detailed description

On BatchWriteItem if items are throttled, we are expected to receive a list of `UnprocessedItems` in the response instead of HTTP 500

## Expected behavior

Receive HTTP 200 but with Unprocessed Items in the response: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html#DDB-BatchWriteItem-response-UnprocessedItems

## Actual behavior

Receive HTTP 500 ProvisionedThroughPutException. "All or nothing"

# Steps to reproduce

Start LocalStack with DynamoDb Service and "DYNAMODB_ERROR_PROBABILITY=1.0"

## Command used to start LocalStack

```
new LocalStackContainer(DockerImageName.parse("localstack/localstack:0.12.9"))
      .withEnv("DYNAMODB_ERROR_PROBABILITY", "1.0")
      .withServices(DYNAMODB)
```

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

You can just Randomly generate a big list of objects (exceeding 1kb per batch) and check this behaviour


dynamodb = aws_stack.connect_to_resource('dynamodb')
    
    aws_stack.create_dynamodb_table(TEST_TABLE_NAME, partition_key=PARTITION_KEY)
    return dynamodb.Table(TEST_TABLE_NAME)
def assert_zero_probability_read_error_injection(table, partition_key):
    
    test_no_errors = table.get_item(Key={PARTITION_KEY: partition_key})
    assert_equal(test_no_errors['ResponseMetadata']['HTTPStatusCode'], 200)
def test_dynamodb_error_injection():
    if not do_run():
        return
    table = get_dynamodb_table()
    partition_key = short_uid()
    assert_zero_probability_read_error_injection(table, partition_key)
    
    config.DYNAMODB_ERROR_PROBABILITY = 1.0
    assert_raises(ClientError, table.get_item, Key={PARTITION_KEY: partition_key})
    
    config.DYNAMODB_ERROR_PROBABILITY = 0.0
def test_dynamodb_read_error_injection():