Now that the implementation of all of the `Expr::Ignore*` is in `Expr.cpp` we can try to remove some duplication. Do this by separating the logic of the `Expr::Ignore*` from the iterative loop.
This is NFC, except for one change: `IgnoreParenImpCasts` now skips, among other things, everything that `IgnoreImpCasts` skips. This means `FullExpr` are now skipped by `IgnoreParenImpCasts`. This was likely an oversight when `FullExpr` was added to the nodes skipped by `IgnoreParenImpCasts`.