Most of the statements mirror the ones provided by clang AST.
Major differences are:
- expressions are wrapped into 'ExpressionStatement' instead of being a subclass of statement,
- semicolons are always consumed by the leaf expressions (return, expression satement, etc),
- some clang statements are not handled yet, we wrap those into an UnknownStatement class, which is not present in clang.
We also define an 'Expression' and 'UnknownExpression' classes in order
to produce 'ExpressionStatement' where needed. The actual implementation
of expressions is not yet ready, it will follow later.