I'm unable to create a step function's state machine through cloudformation. I'm using v0.9.6. A sample template is:

```yaml
---

AWSTemplateFormatVersion: '2010-09-09'

Description: Failing workflow template

Resources:

  TestActivity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: "test-activity"

  FulfillmentWorkflow:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      StateMachineName: TestWorkflow
      DefinitionString:
        Fn::Sub:
          - |-
            {
              "StartAt": "Say hi!",
              "States": {
                "Say hi!": {
                  "Type": "Task",
                  "Resource": "${ActivityArn}",
                  "End": true
                }
              }
            }
          - ActivityArn:
              Ref: TestActivity
      RoleArn:
        Ref: TestRole
    DependsOn: TestActivity

  TestRole:
    Type: AWS::IAM::Role
    Properties:
      Path: "/"
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - states.us-east-1.amazonaws.com
          Action:
          - sts:AssumeRole
      RoleName: "test-role"

```

The command that fails is:

```bash
$ awslocal cloudformation create-stack --stack-name workflow-test --template-body file://failing-template.yaml --capabilities CAPABILITY_NAMED_IAM

Unable to parse response (syntax error: line 1, column 54), invalid XML received:
b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>500 Internal Server Error</title>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>\n'
```

I'm running localstack in docker with all services enabled. In the logs I see this error:

```
localstack_1  | botocore.exceptions.ParamValidationError: Parameter validation failed:
localstack_1  | Invalid type for parameter definition, value: {'Fn::Sub': ['{\n  "StartAt": "Say hi!",\n  "States": {\n    "Say hi!": {\n      "Type": "Task",\n      "Resource": "${ActivityArn}",\n      "End": true\n    }\n  }\n}', {}]}, type: <class 'dict'>, valid types: <class 'str'>
localstack_1  | 2019-07-22T09:39:22:DEBUG:localstack.services.cloudformation.cloudformation_listener: Error response from CloudFormation (500) POST /: b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>500 Internal Server Error</title>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>\n'
```

which I guess means that the definition is not being identified as a string expression. Creating a stack with the same template works against aws.

<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->
headers = mock_aws_request_headers()
    headers['X-Amz-Target'] = 'DynamoDB_20120810.GetItem'
    new_item = make_http_request(url=config.TEST_DYNAMODB_URL,
        method='POST', data=json.dumps(request), headers=headers)
    new_item = json.loads(new_item.text)
    return new_item
def create_dynamodb_table(table_name, partition_key, env=None, stream_view_type=None):
    """Utility method to create a DynamoDB table"""
    dynamodb = connect_to_service('dynamodb', env=env, client=True)
    stream_spec = {'StreamEnabled': False}
    key_schema = [{
        'AttributeName': partition_key,
        'KeyType': 'HASH'
    }]
    attr_defs = [{
        'AttributeName': partition_key,
        'AttributeType': 'S'
    }]
    if stream_view_type is not None:
        stream_spec = {
            'StreamEnabled': True,