Feature/revise spec

DO NOT MERGE. FOR DISCUSSION ONLY. @zdne @honzajavorek Please comment.

This PR updates the SPEC based on @zdne and my multiple discussions and refinements.

It also pulls in the current README with some typo fixes. 

@zdne I basically forked and update your branch for this PR into master. Would you prefer I just fork off of master and just create a branch the only adds the spec? Let me know.
Well, even a set does not indicate order, just uniqueness. If I have:

```
- a (array)
  - a (string)
  - b (number)
```

That means I could have an item be a string or number as the first item, etc. In an unbounded list. Of course we could use the convention that when we generate sample values they are in the order listed. I think we would need to introduce an `ordered` type attribute to cover this.