Allow symbols to be used in compile-time expressions.
This enables us to determine compile-time sizes in expressions involving Eigen::indexing::last.
Required some bigger changes:
- Refactored SymbolicIndex to allow compile-time evaluation.
- Renamed UndefinedIncr to Undefined to use for first/size expressions as well
- Refactored IndexededViewHelper to simplify handling of first/size/incr, reducing the number of free functions
With these, indexed expressions with compile-time constants now behave exactly like the block versions in the slicing tutorial.
Fixes #2535 (closed).