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 -->
s3_client = aws_stack.connect_to_service('s3')
        value = b''
        if bucket_name != BUCKET_MARKER_LOCAL:
            value = s3_client.get_object(Bucket=bucket_name, Key=key_name)['Body'].read()
        return s3_models.FakeKey(name=key_name, value=value)
    s3_models.S3Backend.get_key = get_key
    
    def clean_json(resource_json, resources_map):
        result = clean_json_orig(resource_json, resources_map)
        if isinstance(result, BaseModel):
            if isinstance(resource_json, dict) and 'Ref' in resource_json:
                types_with_ref_as_id_or_name = (apigw_models.RestAPI, apigw_models.Resource)
                attr_candidates = ['function_arn', 'id', 'name']
                for attr in attr_candidates:
                    if hasattr(result, attr):
                        if attr in ['id', 'name'] and not isinstance(result, types_with_ref_as_id_or_name):
                            LOG.warning('Unable to find ARN, using "%s" instead: %s - %s',
                                        attr, resource_json, result)
                        return getattr(result, attr)
                LOG.warning('Unable to resolve "Ref" attribute for: %s - %s - %s',
                            resource_json, result, type(result))
        return result
    clean_json_orig = parsing.clean_json
    parsing.clean_json = clean_json
    
    def parse_and_create_resource(logical_id, resource_json, resources_map, region_name):