MSON AST

C++ implementation. For @zdne to review.

@fosrias and @honzajavorek can take a look if they want.
For consistency, should this be typeDefinition?

```diff
-TypeDefinition typedefinition;
+TypeDefinition typeDefinition;
````