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


return 'https' if USE_SSL else 'http'
def external_service_url(service_key, host=None):
    host = host or HOSTNAME_EXTERNAL
    return '%s://%s:%s' % (get_protocol(), host, service_port(service_key))
def get_edge_url():
    port = EDGE_PORT_HTTP or EDGE_PORT
    return '%s://%s:%s' % (get_protocol(), LOCALSTACK_HOSTNAME, port)
populate_configs()
if DEBUG:
    logging.getLogger('').setLevel(logging.DEBUG)
    logging.getLogger('localstack').setLevel(logging.DEBUG)
BUNDLE_API_PROCESSES = True
USE_PROFILER = is_env_true('USE_PROFILER')
def load_config_file(config_file=None):
    from localstack.utils.common import get_or_create_file, to_str
    config_file = config_file or CONFIG_FILE_PATH
    content = get_or_create_file(config_file)
    try:
        configs = json.loads(to_str(content) or '{}')
    except Exception as e:
        print('Unable to load local config file %s as JSON: %s' % (config_file, e))
        return {}
    return configs
if LS_LOG == 'trace':
    load_end_time = time.time()
    LOG = logging.getLogger(__name__)
    LOG.debug('Initializing the configuration took %s ms' % int((load_end_time - load_start_time) * 1000))