all tasks are generic and have steps

also, exercise step has a content JSON key.

This depends on #3 but **this PR** should be merged first

Example Task:

```json
{ "id": 3,
  "title": "Exercise Task",
  "steps": [{
    "type": "exercise",
    "content": {
      "background":"This exercise has many parts. Each one is a different type of question. Einstein makes a 10 kg spaceship",
      "parts":[
        {
          "background":"The spaceship moves at <span data-math='\\dfrac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}'></span> 1 m/s",
          "questions":[
            {
              "id": "123",
              "format": "short-answer",
              "stem":"What is the rest mass in kg?"
            },{
              "id": "234",
              "format": "multiple-choice",
              "stem":"What is the force if it slams into a wall?",
              "answers":[
                {"id":"id1","value":"10","content":"10 N"},
                {"id":"id2","value":"1","content":"1 N"}
              ]
            }
          ]
        }
      ]
    }
  }]
}
```
HTML is allowed. I was thinking that we suffix `_html` to each key to make that point clear. similar to `*_url`, `*_at`, `is_*` (ie `created_at` or `is_complete`)