MSON AST reflecting the new specification

For @fosrias, @honzajavorek and @pksunkara to review. 
I think the issue I am having here is that there is no clear separation between `Type Name` and `Type Declaration` in a `Named Type`.

hmm.. wait, I might be confused. Why is `name` an `enum` of `array`, `object` again?