refactorings for AST nodes

- rename compound nodes
  - expression -> compound_expr
  - statement -> compound_stmt
- add more interfaces for polymorphism
  - expression interface class
  - statement interface class
- add handy alias, alias::statement_block
- explicitly initialize a base class.