MSON AST

C++ implementation. For @zdne to review.

@fosrias and @honzajavorek can take a look if they want.
This is against the C++ standard (to use incomplete types in containers) please look for the solution to the Markdown Parsers' Node.