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.
After some thinking, I am not sure about the name. Enum type is "enumeration" in most of languages and implies something, which holds one of simple constants having values treated as implementation details - as in [this article](https://en.wikipedia.org/wiki/Enumerated_type). What we describe here isn't enumeration. The closest "enum" to our usage I can think of is [MySQL's ENUM](https://dev.mysql.com/doc/refman/5.0/en/enum.html), but it still kind of resembles the description from the Wikipedia article.

However, I have no ideas of better names. *One of* is definitely worse than *Enum*.