MSON AST

C++ implementation. For @zdne to review.

@fosrias and @honzajavorek can take a look if they want.
Typedef `std::vector<TypeName>` to `TypeNames`. We might need to change vector into deque or list later based on the implementation.