Clean up data interface

This cleans up the abstraction a bit and adds new robot and typo implementations. We now have:

  1. Collection (which holds two sets)
  2. Set (which holds many sequences)
  3. Sequence (which holds many points)
  4. Point (holds input/output data)

Also, I implemented it such that creating a new data model is done easily by defining one callback function: `point_parser()`. This function is passed in the raw data, and it manipulates it to get the data in the correct form: 

```json
{ "input": "x", "output": "y" }
```

You can see this in both `robots.py` and `typos.py`

Topics is a special case since you not only have to manipulate the points, but you have to manipulate the sequence data. I will make adapt for that case once I get some sleep, but it will be done using by passing a callback function I imagine.
> Topics is a special case since you not only have to manipulate the points, but you have to manipulate the sequence data. I will make adapt for that case once I get some sleep, but it will be done using by passing a callback function I imagine.

From the original post.