* `struct Expr` + `enum ExprKind` -> `enum Expr`
`Expr` / `ExprKind` approach does not work well with recursive
processing based on the type system because we can't access common
fields like span while processing child node like `MemberExpr`.
As ast processing is inherently recursive, we should use a
recursive-friendly approach.
* `#[derive(FromVariants)]`
It creates lots of `From<T>` to help using ast enums as a real sum type.
* `#[derive(Spanned)]`
Inspired by https://docs.rs/syn/0.12.13/syn/spanned/trait.Spanned.html
It does not handle attributes yet.
* Parser is not updated yet.