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

# Type of request: This is a ...

[ ] bug report
[x] feature request

# Detailed description

Currently, the KinesisStreamSpecification parameter of AWS::DynamoDB::Table resource in CloudFormation is not supported and will be ignored even if this parameter is set.
We would like to be able to use this parameter.

## Expected behavior

When the following template is applied...

```yaml
---
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  EventStream:
    Type: AWS::Kinesis::Stream
    Properties:
      Name: EventStream
      ShardCount: 1
  EventTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: EventTable
      AttributeDefinitions:
      - AttributeName: pkey
        AttributeType: S
      KeySchema:
      - AttributeName: pkey
        KeyType: HASH
      BillingMode: PAY_PER_REQUEST
      StreamSpecification:
        StreamViewType: NEW_IMAGE
      KinesisStreamSpecification:
        StreamArn: !GetAtt EventStream.Arn

```

We will get the following results as when we run enable-kinesis-streaming-destination.

```sh
$ awslocal dynamodb describe-kinesis-streaming-destination --table-name EventTable
{
    "TableName": "EventTable",
    "KinesisDataStreamDestinations": [
        {
            "StreamArn": "arn:aws:kinesis:us-east-1:000000000000:stream/EventStream",
            "DestinationStatus": "ACTIVE"
        }
    ]
}
```

## Actual behavior

The KinesisStreamSpecification parameter will be ignored even if this parameter is set.

```sh
$ awslocal dynamodb describe-kinesis-streaming-destination --table-name EventTable
{
    "TableName": "EventTable",
    "KinesisDataStreamDestinations": []
}
```

# Steps to reproduce

## Command used to start LocalStack

```
$ docker run --rm -p 4566:4566 localstack/localstack:0.12.11
```

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

CloudFormation templates to apply.

```yaml
---
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  EventStream:
    Type: AWS::Kinesis::Stream
    Properties:
      Name: EventStream
      ShardCount: 1
  EventTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: EventTable
      AttributeDefinitions:
      - AttributeName: pkey
        AttributeType: S
      KeySchema:
      - AttributeName: pkey
        KeyType: HASH
      BillingMode: PAY_PER_REQUEST
      StreamSpecification:
        StreamViewType: NEW_IMAGE
      KinesisStreamSpecification:
        StreamArn: !GetAtt EventStream.Arn

```

Check the results.

```sh
awslocal dynamodb describe-kinesis-streaming-destination --table-name EventTable
```

Manually enable kinesis streaming.

```sh
awslocal dynamodb enable-kinesis-streaming-destination --table-name EventTable --stream-arn arn:aws:kinesis:us-east-1:000000000000:stream/EventStream
```
if isinstance(value, dict):
        keys_list = list(value.keys())
        stripped_fn_lower = keys_list[0].lower().split('::')[-1] if len(keys_list) == 1 else None
        
        if keys_list == ['Ref']:
            ref = resolve_ref(stack_name, value['Ref'], resources, attribute='Ref')
            if ref is None:
                msg = 'Unable to resolve Ref for resource "%s" (yet)' % value['Ref']
                LOG.debug('%s - %s' % (msg, resources.get(value['Ref']) or set(resources.keys())))
                raise DependencyNotYetSatisfied(resource_ids=value['Ref'], message=msg)
            ref = resolve_refs_recursively(stack_name, ref, resources)
            return ref
        if stripped_fn_lower == 'getatt':
            attr_ref = value[keys_list[0]]
            attr_ref = attr_ref.split('.') if isinstance(attr_ref, str) else attr_ref
            return resolve_ref(stack_name, attr_ref[0], resources, attribute=attr_ref[1])
        if stripped_fn_lower == 'join':
            join_values = value[keys_list[0]][1]
            join_values = [resolve_refs_recursively(stack_name, v, resources) for v in join_values]
            none_values = [v for v in join_values if v is None]
            if none_values:
                raise Exception('Cannot resolve CF fn::Join %s due to null values: %s' % (value, join_values))
            return value[keys_list[0]][0].join([str(v) for v in join_values])
        if stripped_fn_lower == 'sub':
            item_to_sub = value[keys_list[0]]
            attr_refs = dict([(r, {'Ref': r}) for r in STATIC_REFS])
            if not isinstance(item_to_sub, list):
                item_to_sub = [item_to_sub, {}]
            result = item_to_sub[0]