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 -->
resource_type = get_resource_type(resource)
    entry = RESOURCE_TO_FUNCTION.get(resource_type)
    if entry is None:
        LOG.warning('Unknown resource type "%s": %s' % (resource_type, resource))
    return bool(entry and entry.get(ACTION_CREATE))
def is_deployed(resource_id, resources, stack_name):
    resource = resources[resource_id]
    resource_status = resource.get('__details__') or {}
    details = retrieve_resource_details(resource_id, resource_status, resources, stack_name)
    return bool(details)
def should_be_deployed(resource_id, resources, stack_name):
    """ Return whether the given resource is all of: (1) deployable, (2) not yet deployed,
        and (3) has no unresolved dependencies. """
    resource = resources[resource_id]
    if not is_deployable_resource(resource) or is_deployed(resource_id, resources, stack_name):
        return False
    res_deps = get_resource_dependencies(resource_id, resource, resources)
    return all_dependencies_satisfied(res_deps, stack_name, resources, resource_id)
def is_updateable(resource_id, resources, stack_name):
    """ Return whether the given resource can be updated or not """
    resource = resources[resource_id]
    if not is_deployable_resource(resource) or not is_deployed(resource_id, resources, stack_name):
        return False
    resource_type = get_resource_type(resource)
    return resource_type in UPDATEABLE_RESOURCES
def all_dependencies_satisfied(resources, stack_name, all_resources, depending_resource=None):