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


dynamodbstreams_api.forward_events(records)
def forward_to_kinesis_stream(records):
    kinesis = aws_stack.connect_to_service('kinesis')
    for record in records:
        if record.get('eventSourceARN'):
            table_name = record['eventSourceARN'].split('/', 1)[-1]
            table_def = TABLE_DEFINITIONS.get(table_name) or {}
            if table_def.get('KinesisDataStreamDestinationStatus') == 'ACTIVE':
                stream_name = table_def['KinesisDataStreamDestinations'][-1]['StreamArn'].split('/', 1)[-1]
                partition_key = list(filter(lambda key: key['KeyType'] == 'HASH',
                    table_def['KeySchema']))[0]['AttributeName']
                kinesis.put_record(StreamName=stream_name, Data=json.dumps(record), PartitionKey=partition_key)
def dynamodb_extract_keys(item, table_name):